Moin Moin!
»» Gibt die Routine immer einen Skalar zurück, wird der eben in eine Liste verwandelt. Da kann man nicht viel dran ändern. Deshalb ja auch return;
und nicht return undef;
.
der Vollständigkeit halber, es gibt noch wantarray!
Du möchtest also folgendes vorschlagen?
sub always_false
{
if (defined wantarray) {
if (wantarray) {
return ();
} else {
return undef;
}
} else {
return;
}
}
Spätestens wenn ich sowas ernsthaft in den Editor hacke, bekommt der Editor ein kill -9, und ich gehe SCHLEUNIGST ins Bett. Denn das ist ein sicheres Zeichen dafür, dass das Gehirn längst auf Standby läuft.
Aber sei's drum: Optimieren wir diesen Murks mal etwas. Zunächst liefert return;
im List-Context eine leere Liste, die Klammern sind redundant:
sub always_false
{
if (defined wantarray) {
if (wantarray) {
return;
} else {
return undef;
}
} else {
return;
}
}
Schritt 2: return;
liefert im Scalar-Context den undefinierten wert, undef
ist redundant:
sub always_false
{
if (defined wantarray) {
if (wantarray) {
return;
} else {
return;
}
} else {
return;
}
}
Schritt 3: Das innere if-then-else enthält für then und else bis auf die Kommentare exakt den selben Code-Block. Einer der beiden Blöcke und die gesamte if-then-else-Konstruktion kann also entfallen, die Kommentare sind zu bereinigen:
sub always_false
{
if (defined wantarray) {
return;
} else {
return;
}
}
Schritt 4: Deja vu -- noch eine redundante if-then-else-Konstruktion. Weg damit:
sub always_false
{
return;
}
q.e.d.
Alexander
--
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".