Якщо ви застрягли в попередній версії 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
#