消除重复的表达

时间:2013-09-12 13:31:08

标签: perl

如何消除下面表达式中重复的术语$e->{aa}{$_}

my $e = {aa=>{aa=>1,bb=>2,c=>undef}};
my $s = " ". (defined $e->{aa}{$_} ? $e->{aa}{$_} :'null') ." ";

2 个答案:

答案 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或“”之类的假值。