Если вы застряли с версией до 5.10, то приведенные выше решения не будут полностью воспроизводить эту say
функцию. Например
sub say { print @_, "\n"; }
Не будет работать с такими вызовами, как
say for @arr;
или
for (@arr) {
say;
}
... потому что вышеупомянутая функция не действует на неявную глобальную $_
подобную print
и реальную say
функцию.
Чтобы более точно воспроизвести Perl 5.10+, say
вам нужна эта функция
sub say {
if (@_) { print @_, "\n"; }
else { print $_, "\n"; }
}
Которая сейчас действует так
my @arr = qw( alpha beta gamma );
say @arr;
say for @arr;
say
Встроенный в Perl6 ведет себя немного по- другому. Вызов его с say @arr
или @arr.say
не просто объединяет элементы массива, а вместо этого печатает их, разделенные разделителем списка. Чтобы воспроизвести это в perl5, вы должны сделать это
sub say {
if (@_) { print join($", @_) . "\n"; }
else { print $_ . "\n"; }
}
$"
- это глобальная переменная-разделитель списков, или, если вы используете, English.pm
то это$LIST_SEPARATOR
Теперь он будет больше похож на perl6, вот так
say @arr;