perl - 三元运算符中的条件不会引起任何变化

标签 perl ternary-operator fizzbuzz

这是我的代码示例:

for $i(1..100){
   if ($i%15==0){$s="Divisible by 15"}
   elsif($i%5==0){$s="Divisible by 5"}
   else {$i%3==0 ? $s="Divisible by 3" : $s=$i};
   print $s."\n"}

这会显示部分正确的结果,如果一个数字可以被 3 整除,它会显示“数字”而不是“能被 3 整除”。

输出示例:

1
2
3
4
Divisible by 5
6
7
8
9
Divisible by 5

PS:我必须以最少的数量编写这段代码。可能的字符数。 (代码这么慢的原因)

最佳答案

第四行解析为

(((($i % 3) == 0) ? ($s = 'Divisible by 3') : $s) = $i)

这意味着即使 $i 可以被 3 整除,赋值看起来也像

($s = 'Divisible by 3') = $i

一些修复:

$i%3==0 ? ($s="Divisible by 3") : ($s=$i)
$s = ($i%3==0 ? "Divisible by 3" : $i)

专业提示:B::Deparse 对于解决这个问题非常有帮助。我运行了命令

perl -MO=Deparse,-p -e '$i%3==0 ? $s="Divisible by 3" : $s=$i'

准确地了解问题所在。

关于perl - 三元运算符中的条件不会引起任何变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14651297/

相关文章:

c# - 为什么我应该在使用三元运算符时将十六进制值显式转换为字节?

javascript - react 三元运算符错误

c++ - 为什么三元运算符在我的代码中不起作用?

performance - FizzBu​​zz 程序似乎很慢 : why?

perl 正则表达式警告 :\1 better written as $1 at (eval 1) line 1

perl - 如何使用 mod_perl 让 Apache 处理 .pl (Perl) 文件?

java - 如何从Java高效调用Perl程序?

perl - 我应该在 Perl 中转义 shell 参数吗?

javascript - 为什么这个 FizzBu​​zz 案例声明不起作用?

javascript - Codecademy FizzBu​​zz 应用程序可以工作,但不被接受作为答案