请您解释为什么以下不起作用
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;
}
}
我希望两者都做同样的事情。
答案 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()
,强制它只返回一个标量(\@array
或undef
)。