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