Perl:打印变量未在&#34中找到;除非-e"声明

时间:2014-11-18 13:22:48

标签: perl

我有这行代码:

unless((-e $FileOne) && (-e $Filetwo) && (-e $FileThree)) {die "$!\n";}

其中,$ variables包含带完整路径的文件名。

此语句检查是否所有3个文件都存在,否则它将die

我是否可以在die语句中使用任何Perl'特殊变量'来告诉我三个文件中哪些文件丢失(即三个-e检查中的哪一个失败了吗?

先谢谢。

4 个答案:

答案 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)

也许是' -e'失踪?

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";}