Конкатенация новой строки после троичного выражения (Perl 5)

Я только что написал простую программу fizzbuzz на Perl:

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

Это вроде работает, но по какой-то причине я не получаю никаких разрывов строк в выводе:

12fizz4buzzfizz78fizzbuzz11fizz1314fizzbuzz1617fizz19buzzfizz2223fizzbuzz26...

Я знаю, это можно исправить, добавив print $/; как отдельное утверждение в конце цикла, но я не могу понять, почему это необходимо.

Что я делаю неправильно?

2 ответа

Решение

Что я делаю неправильно?

Вы эффективно делаете print ("foo") .$/ который соединяет print возвращаемое значение и $/,

С помощью warnings даст вам Useless use of concatenation (.) or string in void context

Попробуйте заключить все с ()

print (($a%15 ? ($a%3 ? ($a%5 ? $a : "buzz") : "fizz") : "fizzbuzz") . $/);

Следующее утверждение

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

Теперь я верю, что вы видите проблему.

Другие вопросы по тегам