Voir aussi: How is "0" result from readdir not false in a while condition?. (pas un doublon, tout étroitement lié.)Où dans la documentation est-il dit que pendant que les tests readdir pour la définition?
Où dans la documentation-t-il dire que si les tests READDIR pour définition des modèles? Par exemple, ce code
#!/usr/bin/perl
use strict;
use warnings;
opendir my $dir, "/tmp" or die "$!";
while (my $file = readdir($dir)) {
print "$file\n";
}
closedir $dir;
lorsqu'il est exécuté par B::Deparse rendements:
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
je me attends à ce comportement, mais je ne peux pas trouver où il est spécifié. Dans le I/O Operators section of perlop il dit
Les lignes suivantes sont équivalentes:
while (defined($_ = <STDIN>)) { print; }
while ($_ = <STDIN>) { print; }
while (<STDIN>) { print; }
for (;<STDIN>;) { print; }
print while defined($_ = <STDIN>);
print while ($_ = <STDIN>);
print while <STDIN>;
Mais il n'y a aucune mention de readdir
.
Il y avait une question plus tôt aujourd'hui étroitement liée - poser des questions sur la raison pour laquelle la boucle ne s'arrête pas sur un fichier appelé ' 0 'et fonctionnant sur MacOS X - était-ce vous? Une découverte intéressante - elle n'est probablement pas documentée, sauf sous le titre de DWIM générale de Perl. –
@Jonathan Leffler J'ai répondu à cette question, mais je ne suis pas satisfait de ma réponse, alors j'ai posé une question plus directe dans l'espoir que cela puisse faire bouger la mémoire de quelqu'un. Je pourrais jurer que je l'ai vu dans les docs quelque part, mais il peut avoir été dans la programmation Perl ou un autre livre. Ou je pourrais juste l'imaginer. Si personne ne peut le trouver dans les documents, je vais probablement soumettre un correctif en l'ajoutant à la partie de perlfunc de readdir. Je n'aime pas me fier à un comportement non documenté. –
BTW, cela est venu parce que j'ai remarqué une charge complète d'échantillons dans "Higher Order Perl" qui n'avait pas le test défini(). J'ai posté l'auteur en disant "c'est faux". Il a renvoyé en disant "non ce n'est pas". – Alnitak