我想做点什么
$val = "value1"
my %test = ("value1" => "yes", "value2" => "yes", "value3" => "yes");
print $test{$val};
因此,如果$ val等于value1,value2或value3,则显示“yes”,否则显示“no”
不确定我是否采用正确/有效的方式。我是perl的新手
答案 0 :(得分:3)
您必须测试散列中是否存在具有此类键的值:
print exists $tests{$val} ? $tests{$val} : "no";
通常,在检查其存在之后,您必须通过defined
检查其定义,但在您的特定情况下,这不是必需的,因为%test
哈希似乎是常量并且是组合的仅包含不包含undef
的常量。
答案 1 :(得分:2)
if (defined $test{$val}) {
print "$test{$val}\n"; # or you might use: print "yes\n"; depending on what you're doing
}
else {
print "no\n";
}
答案 2 :(得分:1)
当只有两个选项时,哈希是最好的数据结构吗?以下是三个可能的替代子程序,它们同样满足要求:
sub test_ternary {
$_[0] eq 'value1' ? 'yes' :
$_[0] eq 'value2' ? 'yes' :
$_[0] eq 'value3' ? 'yes' : 'no' ;
}
sub test_regex { $_[0] =~ /value[123]/ ? 'yes' : 'no' }
use feature 'switch';
sub test_switch {
given ( $_[0] ) {
return 'yes' when /value[123]/;
default { return 'no'; }
}
}
答案 3 :(得分:0)
这里有些复杂的答案。
如果散列中的有效值不能为零或空字符串(或perl中任何其他值为“false”的值),则可以执行以下操作:
say $test{$val} ? $test{$val} : "no";
如果$test{$val}
不存在,未定义,为空或为零,则此表达式将为“false”。