我有这行代码:
unless((-e $FileOne) && (-e $Filetwo) && (-e $FileThree)) {die "$!\n";}
其中,$ variables包含带完整路径的文件名。
此语句检查是否所有3个文件都存在,否则它将die
。
我是否可以在die
语句中使用任何Perl'特殊变量'来告诉我三个文件中哪些文件丢失(即三个-e
检查中的哪一个失败了吗?
先谢谢。
答案 0 :(得分:8)
您可以使用for
循环将变量别名为$ _:
-e or die "$_: $!\n" for $FileOne, $Filetwo, $FileThree;
请注意,如果缺少Filetwo,则甚至不会测试FileThree的存在(如原始代码中所示)。
答案 1 :(得分:2)
这将显示所有丢失的文件,不仅仅是第一个丢失的文件,
@$_ and die "Files missing: @$_\n"
for [ grep { !-e } $FileOne, $Filetwo, $FileThree ];
答案 2 :(得分:1)
简短回答 - 不。您测试复合条件,然后根据评估死亡。
更长的答案:取决于你是如何依赖它作为一个衬垫'。
重写为:
foreach my $file ( @file_list ) {
die "$file does not exist\n" unless -e $file;
}
应该有相同的结果。你可以改变:
NOT ( A AND B AND C )
成:
NOT A
OR NOT B
OR NOT C
(后一种情况有效) 使用De Morgan's law。
答案 3 :(得分:-1)
unless((-e $FileOne) && (-e $Filetwo) && (-e $FileThree)) {die "$!\n";}
用三个' -e' :)
严肃地使用否定
!(A& B& C)=!A | !B | !ç
所以请使用'如果'而不是'除非'
if ((-e $FileOne) && (-e $Filetwo) && (-e $FileThree)) {die "$!\n";}
或
unless((!-e $FileOne) || (!-e $Filetwo) || (!-e $FileThree)) {die "$!\n";}