Thread Automatisches Warning bei falschem Kontext für Funktion (15 answers)
Opened by LanX- at 2009-06-03 16:49

LanX-
 2009-06-03 16:49
#122281 #122281
User since
2008-07-15
1000 Artikel
BenutzerIn

user image
Hi

nach folgendem Thread bei Selfhtml ist mir mal wieder klar geworden wie viele Stolperfallen im Kontext liegen.

Ich denke bei 95% meiner Funktionen sollte die Rückgabe eindeutig sein, also entweder void, scalar oder liste. Da aber jedesmal extra ifs mit wantarray hinzuschreiben, um im Fehlerfall zu croaken ist doch etwas umständlich, wenig elegant und schwer zu lesen.

Wie würdet ihr das lösen oder kennt ihr ein Pragma das schreit wenn es zwar nur ein
Code: (dl )
sub f {return (1,2,3)}
gibt, die Funktion aber scalar abgefragt wird?

Hab mir überlegt mir ne extra Function LIST zu schreiben die ich jedesmal einfüge und die den Fehlerfall prüft:

Code: (dl )
sub f {return LIST(1,2,3)}


aber das wär dann immer ein extra callframe...

dann dachte ich mir ein Attribut mit CPAN:Attribut::Handlers zu basteln

Code: (dl )
1
2
3
sub f :LIST {
return (1,2,3)
}


der die Funktion um wantarray Abfragen erweitert, aber ob das zuverlässig funzt?

Man könnte auch funktional rangehen und einem Wrapper den Code übergeben
Code: (dl )
1
2
3
*f=Listsub {
return (1,2,3)
}


wobei ich wieder den extra callframe hätte...

Zuletzt bin ich auf CPAN:Contextual::Return von Conway gestoßen, habe aber noch die Warnung vom letzten DPW in den Ohren, dessen Module zu meiden...

was denkt ihr?
Last edited: 2009-06-05 09:42:34 +0200 (CEST)

View full thread Automatisches Warning bei falschem Kontext für Funktion