Jika Anda terjebak dengan pra-5.10, maka solusi yang diberikan di atas tidak akan sepenuhnya mereplikasi sayfungsi 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 printdan sayfungsi sebenarnya .
Untuk lebih mereplikasi perl 5.10+ sayAnda 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 saybuiltin di perl6 berperilaku sedikit yang berbeda. Memanggilnya dengan say @arratau @arr.saytidak 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.pmmaka is$LIST_SEPARATOR
Sekarang akan bertindak lebih seperti perl6, seperti itu
say @arr;
# OUTPUT
# alpha beta gamma
#