评估Perl中的if语句

时间:2013-05-16 13:37:42

标签: perl if-statement

有两个声明的变量,如果两者都存在,我想同时评估它们(是真的)。​​

my @array = (1,2);
my $scalar = 0;

if (@array && $scalar){
  print "success\n";
}

&&不起作用。是否有其他操作员或我是否必须创建2个if-state?
我希望它能打印success

3 个答案:

答案 0 :(得分:3)

不起作用的代码不是您发布的代码。

perl -E 'my @array = (1,2); my $scalar = 1; if (@array && $scalar) { say "True!" } else { say "False" }'
True!

perl -E 'my @array = (); my $scalar = 1; if (@array && $scalar) { say "True!" } else { say "False" }'
False

编辑:响应kmxillo评论的更多示例:

perl -E 'my @array = (1,2); my $scalar = 0; if (@array && $scalar) { say "True!" } else { say "False" }'
False

perl -E 'my @array = (1,2); my $scalar = 0; if (@array && defined $scalar) { say "True!" } else { say "False" }'
True!

数字0被认为是假值(与undef一起,空字符串,空数组和字符串“0”),因此将$scalar设置为0会使{{ 1}}假。要在@array && $scalar为0时保持正确,请改为测试$scalar

答案 1 :(得分:1)

如果你认为数组的元素数多于0时为true,那么你的if语句看起来很好,应该按预期工作。

这个程序:

my @array = (1,2);
my $scalar = 1;

if (@array && $scalar) {
    print "TRUE!\n";
}

打印TRUE

为什么你认为&&不起作用?

答案 2 :(得分:-1)

试试这个

  my @array = (1,2);
  my $scalar = 0;

  if (scalar @array && defined $scalar){
     print "success\n";
  }