加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl – 文档中的哪些内容表示虽然测试readdir用于定义?

发布时间:2020-12-16 06:28:35 所属栏目:大数据 来源:网络整理
导读:另见: How is “0” result from readdir not false in a while condition?.(不重复;只是密切相关.) 它在文档中的哪个位置说测试readdir的定义性?例如,这段代码 #!/usr/bin/perluse strict;use warnings;opendir my $dir,"/tmp" or die "$!";while (my $fi
另见: How is “0” result from readdir not false in a while condition?.(不重复;只是密切相关.)

它在文档中的哪个位置说测试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

我期待这种行为,但我找不到它的指定位置.在I/O Operators section of perlop它说

The following lines are equivalent:

???? while (defined($_ = <STDIN>)) { print; }
???? while ($_ = <STDIN>) { print; }
???? while (<STDIN>) { print; }
???? for (;<STDIN>;) { print; }
???? print while defined($_ = <STDIN>);
???? print while ($_ = <STDIN>);
???? 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

通过源代码,op.c中的Perl_newWHILEOP专门针对readdir,glob,readline和每个进行测试…嗯,让我们做一些挖掘,看看何时添加了readdir.

使用git进行一些挖掘后发现,至少从1998年开始就是这样,Gurusamy Sarathy在提交55d729e4时进行了相关更改.虽然我还没有去挖掘哪些版本已经进入,但我打赌它至少会达到5.6.0及以上.在三角洲中我找不到它.

它可能会在第三版骆驼书中提到,但我还没有检查过.

我认为这里的补丁(甚至只是p5p的一个注释)肯定会受到赞赏.

保罗

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读