它在文档中的哪个位置表示虽然测试readdir用于定义?

另请参阅:readdir的“0”如何在while条件下不是false? (不重复;只是密切相关。) 它在文档中的哪个位置表示虽然测试readdir用于定义?例如,这段代码
#!/usr/bin/perl

use strict;
use warnings;

opendir my $dir, "/tmp" or die "$!";

while (my $file = readdir($dir)) {
        print "$filen";
}
closedir $dir;
当运行B :: Deparse时:
use warnings;
use strict 'refs';
die "$!" unless opendir my $dir, '/tmp';
while (defined(my $file = readdir $dir)) {
    do {
        print "$filen"
    };
}
z.pl syntax OK
我期待这种行为,但我找不到它的指定位置。在perlop的I / O运算符部分,它说   以下行是等效的:          
while (defined($_ = <STDIN>)) { print; }
  &NBSP;&NBSP;&NBSP;&NBSP;
while ($_ = <STDIN>) { print; }
  &NBSP;&NBSP;&NBSP;&NBSP;
while (<STDIN>) { print; }
  &NBSP;&NBSP;&NBSP;&NBSP;
for (;<STDIN>;) { print; }
  &NBSP;&NBSP;&NBSP;&NBSP;
print while defined($_ = <STDIN>);
  &NBSP;&NBSP;&NBSP;&NBSP;
print while ($_ = <STDIN>);
  &NBSP;&NBSP;&NBSP;&NBSP;
print while <STDIN>;
但是没有提到
readdir
。     
已邀请:
你没有记录它是完全正确的。我看起来相当努力,我也找不到任何特殊的参考。正如您所发现的那样,这是特别的,并且如下所示:
$ perl -MO=Deparse 
       -E'opendir(my $dir, "."); while($_ = readdir($dir)) { say; }'

BEGIN {
    $^H{'feature_say'} = q(1);
    $^H{'feature_state'} = q(1);
    $^H{'feature_switch'} = q(1);
}
opendir my $dir, '.';
while (defined($_ = readdir $dir)) {
    say $_;
}
-e syntax OK
从源头看,
Perl_newWHILEOP
op.c
专门测试了
readdir
glob
readline
each
......嗯,让我们做一些挖掘,看看何时添加了
readdir
。 用
git
进行一些挖掘后发现,至少从1998年开始就是这样,Gurusamy Sarathy在承诺中做出了相应的改变。虽然我没有去挖掘哪些版本已经进入,但我打赌它至少会达到5.6.0及以上。在三角洲中我找不到它。 它可能会在第三版骆驼书中提到,但我还没有检查过。 我认为这里的补丁(甚至只是p5p的一个注释)肯定会受到赞赏。 保罗     
对不起,我没想到要更新你希望找到这些信息的页面。 我确实在
perlfunc
readdir
部分添加了一个注释。   从Perl 5.12开始,你可以在
while
循环中使用裸
readdir
,这将是   每次迭代都设置
$_
opendir(my $dh, $some_dir) || die;
while(readdir $dh) {
    print "$some_dir/$_n";
}
closedir $dh;
它并没有明确表示它会检查定义。 (我想指出,添加此功能是我对Perl核心的第一个补丁。)     

要回复问题请先登录注册