Se sei bloccato con la versione precedente alla 5.10, le soluzioni fornite sopra non replicheranno completamente la sayfunzione. Per esempio
sub say { print @_, "\n"; }
Non funzionerà con invocazioni come
say for @arr;
o
for (@arr) {
say;
}
... perché la funzione di cui sopra non agisce sul $_like globale implicito printe sulla sayfunzione reale .
Per replicare più fedelmente il perl 5.10+ saysi desidera questa funzione
sub say {
if (@_) { print @_, "\n"; }
else { print $_, "\n"; }
}
Che ora si comporta in questo modo
my @arr = qw( alpha beta gamma );
say @arr;
# OUTPUT
# alphabetagamma
#
say for @arr;
# OUTPUT
# alpha
# beta
# gamma
#
Il saybuiltin in perl6 si comporta in modo leggermente diverso. Invocarlo con say @arro @arr.saynon si limiterà a concatenare gli elementi dell'array, ma li stampa invece separati dal separatore di elenco. Per replicare questo in perl5 dovresti farlo
sub say {
if (@_) { print join($", @_) . "\n"; }
else { print $_ . "\n"; }
}
$"è la variabile separatore di elenco globale o, se stai usando, English.pmè$LIST_SEPARATOR
Ora si comporterà più come perl6, in questo modo
say @arr;
# OUTPUT
# alpha beta gamma
#