Конкатенация новой строки после троичного выражения (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 . $/;
Теперь я верю, что вы видите проблему.