Jika Anda terjebak dengan pra-5.10, maka solusi yang diberikan di atas tidak akan sepenuhnya mereplikasi say
fungsi tersebut. Sebagai contoh
sub say { print @_, "\n"; }
Tidak akan berfungsi dengan pemanggilan seperti
say for @arr;
atau
for (@arr) {
say;
}
... karena fungsi di atas tidak bekerja pada $_
like global implisit print
dan say
fungsi sebenarnya .
Untuk lebih mereplikasi perl 5.10+ say
Anda menginginkan fungsi ini
sub say {
if (@_) { print @_, "\n"; }
else { print $_, "\n"; }
}
Yang sekarang bertindak seperti ini
my @arr = qw( alpha beta gamma );
say @arr;
# OUTPUT
# alphabetagamma
#
say for @arr;
# OUTPUT
# alpha
# beta
# gamma
#
The say
builtin di perl6 berperilaku sedikit yang berbeda. Memanggilnya dengan say @arr
atau @arr.say
tidak hanya akan menggabungkan item array, tetapi mencetaknya secara terpisah dengan pemisah daftar. Untuk mereplikasi ini di perl5 Anda akan melakukan ini
sub say {
if (@_) { print join($", @_) . "\n"; }
else { print $_ . "\n"; }
}
$"
adalah variabel pemisah daftar global, atau jika Anda menggunakan English.pm
maka is$LIST_SEPARATOR
Sekarang akan bertindak lebih seperti perl6, seperti itu
say @arr;
# OUTPUT
# alpha beta gamma
#