[quote=J-jayz-Z,18.05.2005, 16:19]Das passiert bei mir nur, wenn ich in /home/rootcris/ bin und das script mit scripts/filesize.pl aufrufe...[/quote]
Okay, auch dieser Code listet bei mir das aktuelle Verzeichnis und nicht das, in dem das Skript ist ... sei's drum.
Ein Anmerkung habe ich aber noch: Du benutzt zu viele Anfuehrungszeichen: Statt
opendir(DIR, "$f") heisst es einfach
opendir(DIR, $f) und statt
if (-d "$opts{d}") schreibt man besser
if (-d $opts{d}).
Ich nehme mal an, dass du vor Perl einige Shellprogrammierung gemacht hast. Das gleiche Problem hatte ich naemlich auch am Anfang.
Die Ursache: In der Shell muss man immer aufpassen, weil Variablen expandiert werden,
bevor die Befehlszeile ausgefuehrt wird. Ein Beispiel:
$ dirname="foo bar"
$ cd $dirname
$ pwd
/foo
$ cd /
$ cd "$dirname"
$ pwd
/foo bar
Man sieht: Wenn ich
cd $dirname ohne Anfuehrungszeichen schreibe, dann expandiert das zu
cd foo bar,
bevor das cd ausgefuehrt wird, und ich lande im falshcne Verzeichnis. Hier brauche ich Anfuehrungszeichen.
Perl dagegen ist hier eine "richtige" Programmiersprache und evaluiert die Syntax eines Terms, bevor die Variablen expandiert werden (ausser, natuerlich, in einem String-eval :)).
Die zusaetzlichen Anfuehrungszeichen kann man also in Perl getrost weglassen. Im Gegenteil, in Perl kann man damit eher Schaden anrichten, wenn man eine Interpolation als String erzwingt. Hier ein Beispiel:
use strict;
use warnings;
sub printref {
print ${$_[0]};
}
my $foo = "abc";
my $fooref = \$foo; # Referenz auf $foo
printref($fooref); # liefert "abc"
printref("$fooref"); # liefert Warnung "Can't use string ("SCALAR(0x12345678)")
# as a SCALAR ref while "strict refs" in use at ..."
Auch bei Zahlen sind ueberfluessige Anfuehrungszeichen kontraproduktiv, weil Perl jedes Mal gezwungen wird, eine Stringdarstellung der Zahl zu erzeugen, diese zu verwenden und bei einer Rechnung wieder in eine Zahl zurueck zu wandeln. Dies kann meiner Ansicht nach auch zu Verlusten in der Rechengenauigkeit fuehren.