在Perl中使用三元条件运算符有更短的方法吗?

时间:2019-06-04 14:02:08

标签: perl conditional-operator

如果可能的话,我希望在一行中进行以下分配,而又不要太长:

my $variable = defined($self->{_some_thing_stored_here}) ? $self->{_some_thing_stored_here} : new some_function(@with_some_parameters);

是否有可能以类似于通过“ $ _”在循环中获取变量的方式获取if条件的参数,从而使其看起来像这样:

my $variable = defined($self->{_some_thing_stored_here}) ? $_ : new some_function(@with_some_parameters);

PD:我知道可以将条件放入变量中,但我想知道是否有可能将其缩短。

1 个答案:

答案 0 :(得分:8)

defined-or operator

my $variable = $self->{_some_thing_stored_here} // some_function(@with_some_parameters);

需要Perl 5.10 +。

当定义的支票不是您所需要的确切条件时,您也可以(ab)使用postfix foreach来使用$_,尽管这不是最常见的习惯用法,并且您应该注意不要用postfix语句修饰符声明变量,并且您不会调用任何会修改现在别名的全局$_的东西。

my $variable;
$variable = check($_) ? $_ : something_else() for $self->{_some_thing_stored_here};
# make sure something_else does not clobber $_
# that would also clobber $self->{_some_thing_stored_here} !