使用三元运算符分配?

Jan*_*kie 26 variables perl ternary-operator

我在Perl 5.8上,我需要指定一个默认值.我最终这样做了:

if ($model->test) {
    $review = "1"
} else {
    $review = ''
}
Run Code Online (Sandbox Code Playgroud)

$model->test将是"1"或未定义.如果有某些内容$model->test,则将$review"1"设置为等于''.

因为它不是Perl 5.10我不能使用新的时髦定义的或运算符.我的第一反应是使用这样的三元运算符......

defined($model->test) ? $review = "1" : $review = '';
Run Code Online (Sandbox Code Playgroud)

但那也不起作用.

有谁知道如何更有效地分配这个?珍妮

小智 38

我通常把它写成:

$review = ( defined($model->test) ? 1 : '' );
Run Code Online (Sandbox Code Playgroud)

其中括号是为了清楚其他人阅读代码.


ike*_*ami 22

你有一个优先问题.你有什么是一样的

( defined($model->test) ? $review="1" : $review ) = '';
Run Code Online (Sandbox Code Playgroud)

你可以让它与parens一起工作.

my $review; $model->test ? ( $review='1' ) : ( $review='' );
Run Code Online (Sandbox Code Playgroud)

但是将这项任务移出去会更加清晰.

my $review = $model->test ? '1' : '';
Run Code Online (Sandbox Code Playgroud)

当然,你可以简单地使用

my $review = $model->test || '';
Run Code Online (Sandbox Code Playgroud)

但为什么将undef更改为空字符串?

my $review = $model->test;
Run Code Online (Sandbox Code Playgroud)


tch*_*ist 11

$model->test将是"1"或未定义.如果有东西$model->test,设置$review"1"否则设置它''

然后使用这个:

$review = $model->test || "";
Run Code Online (Sandbox Code Playgroud)


bri*_*foy 8

除了条件运算符,我经常喜欢使用do,它返回上一个计算表达式的值:

my $review = do {
     if( ... ) { 'foo' }
  elsif( ... ) { 'bar' }
  elsif( ... ) { 'baz' }
  else         { 'defaut' }
  };
Run Code Online (Sandbox Code Playgroud)