Wenn Sie mit Pre-5.10 nicht weiterkommen, wird die say
Funktion durch die oben angegebenen Lösungen nicht vollständig repliziert . Beispielsweise
sub say { print @_, "\n"; }
Funktioniert nicht mit Aufrufen wie
say for @arr;
oder
for (@arr) {
say;
}
... weil die obige Funktion nicht auf das implizite globale $_
Like print
und die reale say
Funktion einwirkt.
Um das Perl 5.10+ genauer zu replizieren, möchten say
Sie diese Funktion
sub say {
if (@_) { print @_, "\n"; }
else { print $_, "\n"; }
}
Was jetzt so wirkt
my @arr = qw( alpha beta gamma );
say @arr;
# OUTPUT
# alphabetagamma
#
say for @arr;
# OUTPUT
# alpha
# beta
# gamma
#
Das say
eingebaute perl6 verhält sich etwas anders. Wenn Sie es mit say @arr
oder @arr.say
ohne Verkettung der Array-Elemente aufrufen, werden sie stattdessen getrennt mit dem Listentrennzeichen gedruckt. Um dies in perl5 zu replizieren, würden Sie dies tun
sub say {
if (@_) { print join($", @_) . "\n"; }
else { print $_ . "\n"; }
}
$"
ist die globale Listentrennvariable, oder wenn Sie verwenden, English.pm
ist es$LIST_SEPARATOR
Es wird sich jetzt eher wie perl6 verhalten
say @arr;
# OUTPUT
# alpha beta gamma
#