如何消除下面表达式中重复的术语$e->{aa}{$_}
?
my $e = {aa=>{aa=>1,bb=>2,c=>undef}};
my $s = " ". (defined $e->{aa}{$_} ? $e->{aa}{$_} :'null') ." ";
答案 0 :(得分:5)
从v5.10开始,你可以使用defined-or operator //
来测试定义而不是真实,就像||
那样。然后:
my $s = ($e->{aa}{$_} // 'null') . ' ';
答案 1 :(得分:0)
如果由于某种原因你被困在5.10之前的版本上,你可以使用do
块:
my $s = do { my $x = $e->{aa}{$_}; defined $x ? "$x" : 'null';};
引入//
运算符是因为(您可能知道)
my $s = $e->{aa}{$_} || 'null'
会将$s
设置为'null',即使已定义散列条目但具有0或“”之类的假值。