Siehe auch: Wie ist "0" Ergebnis von readdir nicht falsch in einer while-Bedingung? . ( Es ist kein Duplikat, sondern nur eng verwandt. )
Wo in der Dokumentation steht, dass while readdir auf Definiertheit testet? Zum Beispiel, dieser Code
#!/usr/bin/perl
use strict;
use warnings;
opendir my $dir, "/tmp" or die "$!";
while (my $file = readdir($dir)) {
print "$file\n";
}
closedir $dir;
im Durchlauf B::Abreise Erträge:
use warnings;
use strict 'refs';
die "$!" unless opendir my $dir, '/tmp';
while (defined(my $file = readdir $dir)) {
do {
print "$file\n"
};
}
z.pl syntax OK
Ich erwarte dieses Verhalten, aber ich kann nicht finden, wo es festgelegt ist. In der Abschnitt E/A-Operatoren von perlop heißt es
Die folgenden Zeilen sind gleichwertig:
while (defined($_ = <STDIN>)) { print; }
while ($_ = <STDIN>) { print; }
while (<STDIN>) { print; }
for (;<STDIN>;) { print; }
print while defined($_ = <STDIN>);
print while ($_ = <STDIN>);
print while <STDIN>;
Aber es gibt keinen Hinweis auf readdir
.