"或" vs" ||"从sub返回多个值时

时间:2017-08-28 20:35:49

标签: perl

请您解释为什么以下不起作用

my ($href_hash, $aref_array) = return_hash_and_array() 
                                  || die "ERROR: blah";

但这有效

my ($href_hash, $aref_array) = return_hash_and_array() 
                                  or die "ERROR: blah";

使用此子

sub return_hash_and_array{
  my %hash = ('key_1' => "value_1", 'key_2' => 'value_2');
  my @array = ("item", "item2");

  if (@array > 0){
    return(\%hash, \@array);
  }else{
    return;
  }
}

我希望两者都做同样的事情。

1 个答案:

答案 0 :(得分:4)

||or具有不同的优先级,因此您有

my ($href_hash, $aref_array) = ( return_hash_and_array() || die("ERROR: blah") );

VS

( my ($href_hash, $aref_array) = return_hash_and_array() ) or die("ERROR: blah");

两个运算符都在标量上下文中评估它们的左侧,但它们具有不同的LHS操作数。在您的第一个代码段 - 使用||的代码段中 - 您正在评估标量上下文中的return_hash_and_array(),强制它只返回一个标量(\@arrayundef)。