这是我的代码示例:
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:我必须在最低编号中编写此代码。可能的人物。 (代码如此迟缓的原因)
答案 0 :(得分:3)
第四行被解析为
(((($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'
准确了解问题所在。
答案 1 :(得分:0)
三元?:
有higher precedence而不是作业。使用parens来解决这个问题:
for my $i (1 .. 100) {
my $s = "Divisible by ";
$i%15==0 ? ($s .= 15)
: $i%5==0 ? ($s .= 5)
: $i%3==0 ? ($s .= 3)
: ($s =$i);
print "$s\n";
}
输出:
1
2
Divisible by 3
4
Divisible by 5
Divisible by 3
7
8
Divisible by 3
Divisible by 5
答案 2 :(得分:-1)
如果您想要一个字符较少的版本,
for $i(1..100){print(($i%3&&$i%5?$i:"Divisible by ".($i%5?3:$i%15?5:15))."\n");}
打印功能后的括号表示调用打印功能,而不是对表达式进行分组。由于括号是该函数的可选项而引起的。