三元表达后连接换行符(Perl 5)

时间:2014-05-21 08:49:47

标签: perl concatenation ternary-operator fizzbuzz perl5

我刚刚在Perl中编写了一个简单的fizzbuzz程序:

#!/usr/bin/perl
for $a (1..100) {
  print ($a%15 ? ($a%3 ? ($a%5 ? $a : "buzz") : "fizz") : "fizzbuzz") . $/;
}

它有点奏效,但出于某种原因,我没有在输出中得到任何换行符:

12fizz4buzzfizz78fizzbuzz11fizz1314fizzbuzz1617fizz19buzzfizz2223fizzbuzz26...

我知道这可以通过在循环结束时添加print $/;作为单独的语句来修复,但我无法弄清楚为什么这是必要的。

我做错了什么?

2 个答案:

答案 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 . $/;

现在我相信你可以看到问题。