Perl三元条件运算符
发布时间:2020-12-15 23:30:12 所属栏目:大数据 来源:网络整理
导读:我正在尝试在脚本中编写更高效的代码,并且有时会实现三元条件运算符.在循环中使用三元条件运算符时,我无法理解为什么会得到额外的结果: #!/usr/bin/perluse strict;use warnings;my @array = ('Serial = "123"','Serial = "456"','Serial = "789"');my ($te
我正在尝试在脚本中编写更高效的代码,并且有时会实现三元条件运算符.在循环中使用三元条件运算符时,我无法理解为什么会得到额外的结果:
#!/usr/bin/perl use strict; use warnings; my @array = ('Serial = "123"','Serial = "456"','Serial = "789"'); my ($test1,$test2); foreach my $a (@array){ !$test1 ? $test1 = $a : $test1 .= " AND " . $a; } foreach my $b (@array){ if (!$test2) { $test2 = $b } else { $test2 .= " AND " . $b; } } print "Test1: $test1n"; print "Test2: $test2n"; 输出: ~/bin/test.pl Test1: Serial = "123" AND Serial = "123" AND Serial = "456" AND Serial = "789" Test2: Serial = "123" AND Serial = "456" AND Serial = "789" Test1输出有一个额外的“Serial =”123“,我做错了什么? 解决方法
作业的优先级低于?.这个
!$test1 ? $test1 = $a : $test1 .= " AND " . $a; 相当于: (!$test1 ? $test1 = $a : $test1) .= " AND " . $a; 因此,首先$test1将变为Serial =“123”,然后立即追加AND Serial =“123”. 试试这个: !$test1 ? ($test1 = $a) : ($test1 .= " AND " . $a); 更好的解决方案是: $test1 = !$test1 ? $a : $test1 . " AND " . $a; 使用三元运算符进行副作用会变得非常混乱,我建议避免它. 编辑 正如MuIsTooShort join(‘AND’,array)所指出的那样,在您的情况下,它将是最简洁和可读的解决方案. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |