Jeśli utkniesz w wersji wcześniejszej niż 5.10, powyższe rozwiązania nie będą w pełni replikować tej sayfunkcji. Na przykład
sub say { print @_, "\n"; }
Nie będzie działać z wywołaniami, takimi jak
say for @arr;
lub
for (@arr) {
say;
}
... ponieważ powyższa funkcja nie działa na niejawne $_podobne globalne printi rzeczywistą sayfunkcję.
Aby dokładniej powielić perl 5.10+ say, potrzebujesz tej funkcji
sub say {
if (@_) { print @_, "\n"; }
else { print $_, "\n"; }
}
Który teraz działa w ten sposób
my @arr = qw( alpha beta gamma );
say @arr;
say for @arr;
sayWbudowane w perl6 zachowuje się trochę inaczej. Wywołanie go za pomocą say @arrlub @arr.saynie tylko połączy elementy tablicy, ale zamiast tego drukuje je oddzielone separatorem listy. Aby powielić to w perl5, zrobiłbyś to
sub say {
if (@_) { print join($", @_) . "\n"; }
else { print $_ . "\n"; }
}
$"jest zmienną globalnego separatora listy lub, jeśli używasz, English.pmto jest$LIST_SEPARATOR
Będzie teraz zachowywał się bardziej jak perl6
say @arr;