我有以下代码:
if (defined(@hash{qw{value1 value2 value3}})){
# code block
}
我想要发生的是,如果定义了$ hash {value1},$ hash {value2}或$ hash {value3},则执行代码块。但是,当且仅当定义$ hash {value3}时,代码块才会执行:
$hash{value3}='yep, here!';
if (defined(@hash{qw{value1 value2 value3}})){
print "yay!";
}
输出:
yay!
可是:
$hash{value2}='yep, here!';
if (defined(@hash{qw{value1 value2 value3}})){
print "yay!";
}
输出:
<nothing>
为什么这不正常,我该怎么办?
答案 0 :(得分:2)
perldoc -f defined没有提及哈希切片,警告并没有警告你这个,但你想要的是,
if (grep defined, @hash{qw{value1 value2 value3}}) {
# code block
}
作为defined()
强制标量上下文, slices 在这种情况下返回最后一个元素。
use warnings;
sub context {
print wantarray ? "LIST" : "SCALAR";
}
my $def = defined(context());
输出SCALAR