当前位置:  开发笔记 > 编程语言 > 正文

Perl三元条件运算符问题中的赋值

如何解决《Perl三元条件运算符问题中的赋值》经验,为你挑选了3个好方法。

我程序中的Perl代码片段给出了错误的结果.

$condition ? $a = 2 : $a = 3 ;
print $a;

无论价值$condition是什么,输出总是3,怎么样?



1> Pat..:

Perl 文档中对此进行了解释.

由于Perl运算符优先级,语句被解析为

($condition ? $a= 2 : $a ) = 3 ;

因为?:运算符产生可分配的结果,所以3被分配给条件的结果.

当$ condition为true时,这意味着($ a = 2)= 3给出$ a = 3

当$ condition为false时,这意味着($ a)= 3给$ a = 3

写这个的正确方法是

$a = ( $condition ? 2 : 3 );
print $a;

我们在工作中被这个咬了,所以我在这里发帖,希望别人会发现它有用.



2> 小智..:

一旦你知道你可能会遇到优先问题,就可以找出Perl认为你的意思:

perl -MO=Deparse,-p -e '$condition ? $a= 2 : $a= 3 ; print $a;'

在你的情况下,这将告诉你:

(($condition ? ($a = 2) : $a) = 3);
print($a);
-e syntax OK

......那时你应该说"哦,这解释了"!



3> 小智..:

只是为了扩展先前的答案...如果由于某种原因,分配需要成为条件的一部分,那么你想要这样写:

$condition ? ($a=2) : ($a=3);

如果您根据条件分配不同的变量,这将非常有用.

$condition ? ($a=2) : ($b=3);

如果您选择变量,但无论如何分配相同的东西,您甚至可以这样做:

($condition ? $a : $b) = 3;

推荐阅读
手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有