Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl if的含义(!$)_Perl - Fatal编程技术网

Perl if的含义(!$)

Perl if的含义(!$),perl,Perl,我有一个Perl脚本正在读取文件。在某些情况下,代码在for循环中使用以下if语句: for (my $i = 0; $i<10 ; $i++ ) { $_ = <INPUT>; if (!$_) {last;} ... for(my$i=0;$i如果条件,即()中的内容,在一个待测试的“真实性”中进行评估。因此,如果它是未定义的,或”(空字符串)或0(或字符串“0”),则为假 该!否定它后面的内容,因此如果(!$)为false(undef或'或

我有一个Perl脚本正在读取文件。在某些情况下,代码在for循环中使用以下if语句:

for (my $i = 0; $i<10 ; $i++ ) {

    $_ = <INPUT>;
    if (!$_) {last;} 
    
...

for(my$i=0;$i如果
条件,即
()
中的内容,在一个待测试的“真实性”中进行评估。因此,如果它是
未定义的
,或
(空字符串)或
0
(或字符串
“0”
),则为假

否定它后面的内容,因此
如果(!$)
为false(
undef
'
0
“0”
),则
为true。但是,在这种情况下,
$\uuu
是从中分配的,因此它的末尾总是有一个换行符——除非
的源已耗尽,在这种情况下
返回
未定义的

因此,在这种情况下,
if(!$)
测试是否没有更多的内容可从
INPUT
读取,如果是这种情况,则退出
for
循环

对所示代码的一些注释

  • 对于我的$i(0..9)
,C样式的
循环也可以写成
,这被认为是更好、更可读的。†请参阅,并真正关注

  • 这段代码

    $_=<INPUT>
    if (!$_) { last; }
    ...
    

  • †如此之多以至于现在即使是核心编译语言也有了它。
    C++11
    引入了

    for(auto-var:container)..//(实际上是const-auto&),或auto&,或auto&&
    
    上面链接的标准参考说明

    用作传统的
    for
    循环[…]的可读性更高的等价物


    另请参阅,检查文件结尾似乎是一种笨拙的方法。更常见的是,这将通过
    while()
    循环来完成,而不是for-loop。一种笨拙的结构
    if(!${last;}
    最好写为
    最后一个,除非$\u
    。建议:google for perl书架-你会发现它很有用。@HenriqueToste很好,我很高兴你喜欢它:)请告诉我是否有更多的帮助,或者如果以后出现问题。
    while (<INPUT>) {
        ...
    }