Nếu bạn bị mắc kẹt với trước 5.10, thì các giải pháp được cung cấp ở trên sẽ không tái tạo đầy đủ say
chức năng. Ví dụ
sub say { print @_, "\n"; }
Sẽ không hoạt động với các lời gọi như
say for @arr;
hoặc là
for (@arr) {
say;
}
... bởi vì hàm trên không hoạt động trên hàm $_
like toàn cục ngầm định print
và say
hàm thực .
Để sao chép chặt chẽ hơn perl 5.10+, say
bạn muốn chức năng này
sub say {
if (@_) { print @_, "\n"; }
else { print $_, "\n"; }
}
Mà bây giờ hoạt động như thế này
my @arr = qw( alpha beta gamma );
say @arr;
# OUTPUT
# alphabetagamma
#
say for @arr;
# OUTPUT
# alpha
# beta
# gamma
#
Nội say
trang trong perl6 hoạt động hơi khác một chút. Gọi nó bằng say @arr
hoặc @arr.say
sẽ không chỉ nối các mục mảng mà thay vào đó in chúng được phân tách bằng dấu phân tách danh sách. Để sao chép điều này trong perl5, bạn sẽ làm điều này
sub say {
if (@_) { print join($", @_) . "\n"; }
else { print $_ . "\n"; }
}
$"
là biến phân tách danh sách chung hoặc nếu bạn đang sử dụng English.pm
thì là$LIST_SEPARATOR
Bây giờ nó sẽ hoạt động giống perl6 hơn, giống như vậy
say @arr;
# OUTPUT
# alpha beta gamma
#