So, ich hatte gerade ein fieses Problem in einem kleinen Script: Ich habe einen Hash erstellt auf folgende Weise:
my %hash = (
a => &irgendeine_funktion(...),
b => &irgendeine_funktion(...),
);
Jetzt gibt es hier ein gemeines Problem, wenn nämlich die Funktion "nichts zurückgibt", wobei "nichts zurückgibt" hier bedeutet, dass die Funktion mittels
return; abgebrochen wird. In diesem Fall wird nämlich das Ergebnis von &irgendeine_funktion im Listenkontext ausgewertet (zumindest hab' ich mir das so zusammengereimt ;)), und als Folge quasi "ignoriert", d.h. der Hash schaut (bei 2x "nichts zurückgegeben") dann aus wie folgt:
( 'a' => 'b' )
Das das nicht Sinn und Zweck des Ganzen ist dürfte eigentlich auf der Hand liegen. Ebenso hätte ich gedacht, dass der =>-Operator seine beiden Parameter im skalaren Kontext auswertet, tja, leider ein Irrtum.
Umgehen kann man das Ganze z.B., indem man explizit undef zurückgibt oder die Funktion explizit im skalaren Kontext aufruft (
scalar &irgendeine_funktion(...)).
So, also was sagt ihr: Ist das ein Denkfehler meinerseits, schlichtweg ein Bug in Perl oder aber auch irgendwas dazwischen?
Und: Gleich mal 'ne Entschuldigung für "=>-Operator". Ich weiß, dass es erst mit Perl6 soweit sein wird, und damit dürfte dann dieses Problem hier keins mehr sein.
Nachtrag: Mein letzter Absatz eben war doch eigentlich schon die Antwort, hm? Des is jetzt irgendwie blöd... ;)\n\n
<!--EDIT|DS|1076701302-->