Thread wantarray und return undef (20 answers)
Opened by rosti at 2012-02-10 13:15

GUIfreund
 2012-02-10 20:08
#156040 #156040
User since
2011-08-08
559 Artikel
BenutzerIn
[default_avatar]
2012-02-10T12:15:47 rosti
hi;

i.f. Code greift das die "Kein Array bekommen!" nicht, obwohl der Return-Value undef ist:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
use strict;
use warnings;
use Data::Dumper;

my $x = foo();
print "$x\n"; # 4711

my @y = foo() or die "Kein Array bekommen!";
print Dumper @y; # $VAR1 = undef;

sub foo{
  return wantarray ? undef : 4711;
}


Ist das ein Bug?
Wenn ich jedoch notiere: return wantarray ? () : 4711; stirbt das Script. Verstehe ich nicht: Eine leere Liste ist doch was Definiertes oder?

Ich glaube, da verwechselst du etwas. Ja, eine leere Liste ist was Definiertes. Aber das or prüft nicht auf Definiertheit, sondern auf Wahrheit. Und eine leere Liste gilt als falsch. Weil Wahrheit immer im skalaren Kontext evaluiert wird. Und eine Liste ergibt im skalaren Kontext die Anzahl der Elemente. Und 0 gilt als falsch.
Gruß
GUIfreund

View full thread wantarray und return undef