Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.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 使用-e运算符作为WHILE循环条件的警告消息_Perl - Fatal编程技术网

Perl 使用-e运算符作为WHILE循环条件的警告消息

Perl 使用-e运算符作为WHILE循环条件的警告消息,perl,Perl,使用警告和严格警告。ActivePerl(受供应商限制)版本5.8.0 Build 806 获取此警告消息:在D:\NIGHTLY\SamJudNighlty_ABS.pl第589行(底部的代码段)的数字ne(!=)中使用未初始化值 实际上,多行收到此警告,因为此构造在代码中经常使用。继承了这段代码并试图清理它。不确定这是否是一个问题,但希望跟进 根据我的研究:“-e返回1表示真,返回“”表示假,如果文件不存在,则返回未定义的值 587 $finFlag = $NightlyFlagPath .

使用警告和严格警告。ActivePerl(受供应商限制)版本5.8.0 Build 806

获取此警告消息:在D:\NIGHTLY\SamJudNighlty_ABS.pl第589行(底部的代码段)的数字ne(!=)中使用未初始化值

实际上,多行收到此警告,因为此构造在代码中经常使用。继承了这段代码并试图清理它。不确定这是否是一个问题,但希望跟进

根据我的研究:“-e返回1表示真,返回“”表示假,如果文件不存在,则返回未定义的值

587 $finFlag = $NightlyFlagPath . "\\FIN\\DONE";
588        
589 while((-e  $finFlag) != 1)
590 {
591   sleep(120);
592   print(PROGRESSFILE "\nWaiting for the Fin Nightly to finish" . getPCTime5()); 
593 } 
Perl中许多运算符的“真/假”返回的全部要点,当然包括了
-e
,就是它不需要进一步测试

while (not -e $finFlag) { ... }

!=
以数字方式比较其参数,因此当它使用
undef
(或
'
,或任何字符串)时会发出警告。这正是当文件不存在时发生的情况,因为
-e
确实会返回
undef
,就像其他文件测试一样。

整点“真/假”“返回Perl中的许多运算符,
-e
当然包括在内,就是它不需要进一步测试。你只需要

while (not -e $finFlag) { ... }


=
以数字方式比较其参数,从而在使用
undef
时发出警告(或
'
或任何字符串)。这正是当文件不存在时发生的情况,因为
-e
确实会返回
unde
,就像其他文件测试一样。

-e
如果文件存在,则返回真值;如果发生错误(包括文件不存在),则返回
unde

在数值比较中使用的是
undef
,因此警告无效。改用布尔算术

固定的:

while (!-e $finFlag) {
    sleep(120);
    print(PROGRESSFILE "Waiting for the Fin Nightly to finish " . getPCTime5() . "\n"); 
} 
但是,如果文件存在,这将永远循环,但是有一些东西阻止您获取有关它的信息(例如权限问题)。以下解决了该问题:

while (1) {
    last if -e $finFlag;
    die("Can't stat \"$finFlag\": $!\n") if !$!{ENOENT};

    sleep(120);
    print(PROGRESSFILE "Waiting for the Fin Nightly to finish " . getPCTime5() . "\n"); 
} 
稍微清楚一点:

while (1) {
    last if stat($finFlag);
    die("Can't stat \"$finFlag\": $!\n") if !$!{ENOENT};

    sleep(120);
    print(PROGRESSFILE "Waiting for the Fin Nightly to finish " . getPCTime5() . "\n"); 
} 

-e
如果文件存在,则返回真值;如果发生错误(包括文件不存在),则返回
未定义的值

在数值比较中使用的是
undef
,因此警告无效。改用布尔算术

固定的:

while (!-e $finFlag) {
    sleep(120);
    print(PROGRESSFILE "Waiting for the Fin Nightly to finish " . getPCTime5() . "\n"); 
} 
但是,如果文件存在,这将永远循环,但是有一些东西阻止您获取有关它的信息(例如权限问题)。以下解决了该问题:

while (1) {
    last if -e $finFlag;
    die("Can't stat \"$finFlag\": $!\n") if !$!{ENOENT};

    sleep(120);
    print(PROGRESSFILE "Waiting for the Fin Nightly to finish " . getPCTime5() . "\n"); 
} 
稍微清楚一点:

while (1) {
    last if stat($finFlag);
    die("Can't stat \"$finFlag\": $!\n") if !$!{ENOENT};

    sleep(120);
    print(PROGRESSFILE "Waiting for the Fin Nightly to finish " . getPCTime5() . "\n"); 
} 

您是正确的,警告弹出为
undef
值与
1
进行比较。由于这种构造没有意义,您可以
直到(-e$finFlag){..}
或@zdim编写的内容。
-e
如果文件存在,则返回一个真值;如果发生错误(包括文件不存在),则返回
undef
。您是正确的,并且将警告弹出为
undef
值与
1
进行比较。由于这样的构造没有意义,您可以
直到(-e$finFlag){..}
或@zdim编写的内容。
-e
如果文件存在,则返回真值;如果发生错误(包括文件不存在),则返回
undef