使用警告和严格。 ActivePerl(供应商受限)版本5.8.0 Build 806
获取此警告消息:在D:\ NIGHTLY \ SamJudNighlty_ABS.pl第589行(底部的代码段)中使用数字ne(!=)中未初始化的值。
实际上多行会收到此警告,因为此构造经常在代码中使用。继承此代码并尝试清理它。不确定这是否是一个问题,但想要跟进它。
根据我的研究结果:" -e返回1表示真实和''表示false,如果文件不存在,则为未定义的值。
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 }
答案 0 :(得分:4)
Perl中许多运算符的“真/假”返回的重点,当然包括-e
,它不需要再进一步测试。你只需要
while (not -e $finFlag) { ... }
!=
equality operator将其参数数字进行比较,从而获得undef
使用时的警告(或''
或任何字符串)。这正是当文件不存在时发生的事情,因为-e
然后确实返回undef
,就像其他文件测试一样。
答案 1 :(得分:0)
-e
如果文件存在则返回true值,如果发生错误则返回undef
(包括文件不存在)。
您在数字比较中使用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");
}