我刚刚在Perl中编写了一个简单的fizzbuzz程序:
#!/usr/bin/perl
for $a (1..100) {
print ($a%15 ? ($a%3 ? ($a%5 ? $a : "buzz") : "fizz") : "fizzbuzz") . $/;
}
它有点奏效,但出于某种原因,我没有在输出中得到任何换行符:
12fizz4buzzfizz78fizzbuzz11fizz1314fizzbuzz1617fizz19buzzfizz2223fizzbuzz26...
我知道这可以通过在循环结束时添加print $/;
作为单独的语句来修复,但我无法弄清楚为什么这是必要的。
我做错了什么?
答案 0 :(得分:6)
我做错了什么?
您实际上正在print ("foo") .$/
连接print
返回值和$/
。
使用warnings
会为您提供Useless use of concatenation (.) or string in void context
尝试用()
print (($a%15 ? ($a%3 ? ($a%5 ? $a : "buzz") : "fizz") : "fizzbuzz") . $/);
答案 1 :(得分:1)
以下陈述
print ($a%15 ? ($a%3 ? ($a%5 ? $a : "buzz") : "fizz") : "fizzbuzz") . $/;
等于(或多或少)
my $t = print ($a%15 ? ($a%3 ? ($a%5 ? $a : "buzz") : "fizz") : "fizzbuzz");
$t . $/;
现在我相信你可以看到问题。