Jeśli utkniesz w wersji wcześniejszej niż 5.10, powyższe rozwiązania nie będą w pełni replikować tej say
funkcji. 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 print
i rzeczywistą say
funkcję.
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;
say
Wbudowane w perl6 zachowuje się trochę inaczej. Wywołanie go za pomocą say @arr
lub @arr.say
nie 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.pm
to jest$LIST_SEPARATOR
Będzie teraz zachowywał się bardziej jak perl6
say @arr;