Якщо ви застрягли в попередній версії 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;
# OUTPUT
# alphabetagamma
#
say for @arr;
# OUTPUT
# alpha
# beta
# gamma
#
say
Вбудований в Perl6 поводиться трохи по- іншому. Викликаючи його за допомогою say @arr
або @arr.say
не просто об'єднає елементи масиву, а натомість друкує їх розділеними за допомогою розділювача списку. Щоб повторити це в perl5, ви зробите це
sub say {
if (@_) { print join($", @_) . "\n"; }
else { print $_ . "\n"; }
}
$"
є змінною глобального роздільника списку, або якщо ви використовуєте, English.pm
то є$LIST_SEPARATOR
Тепер він буде діяти більше як perl6, як так
say @arr;
# OUTPUT
# alpha beta gamma
#