-2

我无法弄清楚为什么该else部分没有被执行:

opendir (DIR_03, "$dir_01"."/"."$dir_02"."/"."$file");
@ANR=readdir(DIR_03);
close(DIR_03);
foreach my $anr_file (@ANR) { 
    chomp($anr_file);
    if( $anr_file ne "traces.txt" || 
        $anr_file ne "traces_system.txt" || 
        $anr_file ne "traces_SystemServer_WDT.txt") {
        return("TraceFileNotFound");
    } else {
        return("TraceFileFound");
    }
}
4

3 回答 3

3
if($anr_file ne "traces.txt" || $anr_file ne "traces_system.txt" || $anr_file ne "traces_SystemServer_WDT.txt")
if($anr_file ne "traces.txt" && $anr_file ne "traces_system.txt" && $anr_file ne "traces_SystemServer_WDT.txt")

一般规则:不等于或 - 组合几乎总是错误的。

(在这里,如果一个ne是假的(平等),其他的都被保证是真的,因此一切都是真的;总是。)

于 2013-06-10T15:40:17.173 回答
1

这将永远是正确的,因为您使用不等于或。

将其简化为 files abc并查看逻辑。

如果查询$file = 'a'并且您有

if ($file ne 'a' || $file ne 'b' || $file ne 'c') {...}

你有

if (false || true || true) {...}

对于 的任何值,这始终是正确的$file。尝试将您的逻辑更改为eq,并相应地更改if-else块的内容。

   if($anr_file eq "traces.txt" || $anr_file eq "traces_system.txt" || $anr_file eq "traces_SystemServer_WDT.txt")
   {
     # Found it!
   }
   else 
   {
     # Not Found
   }    
于 2013-06-10T15:45:08.040 回答
0

这个:

 if($anr_file ne "traces.txt" || $anr_file ne "traces_system.txt" ...

几乎可以肯定不是你想要的。如果$anr_file等于traces.txt,则它不等于traces_system.txt,因此您的第一个子句将始终解析为 true。

于 2013-06-10T15:42:51.183 回答