如何测试是否定义并返回值或某个默认值

时间:2015-08-20 16:14:14

标签: perl

在我的代码中,我经常写这样的东西:

my $a = defined $scalar ? $scalar : $default_value;

my $b = exists $hash{$_} ? $hash{$_} : $default_value;

有时哈希很深,而且代码不是很易读。是否有更简洁的方法来完成上述任务?

1 个答案:

答案 0 :(得分:12)

假设您使用的是Perl 5.10及更高版本,则可以使用//运算符。

my $a = defined $x ? $x : $default;  # clunky way
my $a = $x // $default;              # nice way

同样你可以做到

my $b = defined $hash{$_} ? $hash{$_} : $default;  # clunky
my $b = $hash{$_} // $default;                     # nice

请注意,在上面的示例中,我正在检查defined $hash{$_},而不是exists $hash{$_}。没有像定义那样存在的简写。

最后,你有//=运算符,所以你可以这样做;

$a = $x unless defined $a;  # clunky
$a //= $x;                  # nice

这类似于||=,它对真理做同样的事情:

$a = $x unless $x;  # Checks for truth, not definedness.
$a ||= $x;