1

我刚刚用 Perl 写了一个简单的 fizzbuzz 程序:

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

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

12fizz4buzzfizz78fizzbuzz11fizz1314fizzbuzz1617fizz19buzzfizz2223fizzbuzz26...

我知道这可以通过print $/;在循环末尾添加一个单独的语句来解决,但我不知道为什么这应该是必要的。

我究竟做错了什么?

4

2 回答 2

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") . $/);
于 2014-05-21T08:51:12.377 回答
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 . $/;

现在,我相信您可以看到问题所在。

于 2014-05-21T08:55:26.120 回答