Suchscript mit eigenartigem Verhalten
Christoph Schnauß
- perl
hallo Forum ;-)
man erlebt ja immer mal Ueberraschungen ... ich wollte mir fuer ein lokales Verzeichnis ein Suchscript basteln und habe der Einfachheit halber erstmal die search.pl von Matt Wright genommen. Das Ganze unter Win2000 und mit perl 5.6. Das ging alles ganz gut, man braucht ja nur die Pfade richtig einzutippen.
Jetzt wollte ich genau dasselbe unter Win98 auch haben. Da ist perl 5.003 installiert (build 522), und ploetzlich funzt es nicht. Der Debugger sagt mir, dass er eine Subroutine im Originalscript nicht versteht, und zwar diese:
sub get_files {
chdir($basedir);
foreach $file (@files) {
$ls = ls $file
;
@ls = split(/\s+/,$ls);
foreach $temp_file (@ls) {
if (-d $file) {
$filename = "$file$temp_file";
if (-T $filename) {
push(@FILES,$filename);
}
}
elsif (-T $temp_file) {
push(@FILES,$temp_file);
}
}
}
}
Insbesondere will er das "ls" nicht.
Kann mir jemand sagen, warum das unter Win2000 laeuft und unter Win98 nicht ?
Ist es moeglich, dass perl "ls" hier als Unix-Syntax interpretiert?
Ich habe sonst allerhand andere scripts, die in beiden Systemen voellig identisch eingesetzt werden koennen.
Christoph S.
hi!
Insbesondere will er das "ls" nicht.
Kann mir jemand sagen, warum das unter Win2000 laeuft und unter Win98 nicht ?
Ist es moeglich, dass perl "ls" hier als Unix-Syntax interpretiert?
ls ist ein Unix-Befehl um Dateien und Verzeichnisse aufzulisten (wie DIR unter DOS/Windows). Natürlich
kann Windows 98 den nicht kennen, da er ja Unix-spezifisch ist. Wieso dein Win2000 den erkennt,
erscheint mir allerdings auch rätselhaft, dürfte es nämlich theoretisch nicht. Die einzige Erklärung, die ich
mir vorstellen könnte, wäre, dass dort ein portiertes Unix-Tool irgendwo herumliegt.
Die Backticks (``) dienen dazu, einen Befehl auszuführen und dessen Ausgabe in eine Variable umzuleiten.
bye, Frank!
Hallo!
Jetzt wollte ich genau dasselbe unter Win98 auch haben. Da ist perl 5.003 installiert (build 522), [...]
ActivePerl Build 522 ist aber Perl 5.005_03.
Insbesondere will er das "ls" nicht.
Kann mir jemand sagen, warum das unter Win2000 laeuft und unter Win98 nicht ?
Ist es moeglich, dass perl "ls" hier als Unix-Syntax interpretiert?
Perl interpriert da gar nichts, sondern laesst "ls $file" einfach vom System ausfuehren. Und dieses findet ein ls oder tut's eben nicht, wie es bei Dir auf Win98 wohl der Fall ist.
Und ja: 'ls' ist ein Unix-Kommando, der Counterpart auf Dos/Win heisst 'dir'. Und scheinbar gibt es in Win2000 auch ein ls, aber macht das ueberhaupt dasselbe? Gib's doch einfach mal ein auf der command line.
Anyway, die beste Methode, einen Verzeichnisinhalt auszulesen ist nach wie vor opendir/readdir/closedir. Eben diese Systemabhaengigkeiten umgeht man dann.
So lange