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

rosti
 2012-02-10 20:22
#156041 #156041
User since
2011-03-19
3502 Artikel
BenutzerIn
[Homepage]
user image
Ok, für Alle zum Spielen ;)

Var 1:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
my @y = foo( foo => 1, bar => 2, baz => 3) or die $@;
print "Hallo, ich lebe noch!\n";
sub foo{
        my %in = @_;
        # erstelle eine hashref UND eine liste
        my $ref = {};
        my @li  = ();
        eval{
                # zum Testen eine exception
                die "Something is wrong!\n";
                $ref = \%in;
                @li  = values %in;
        };
        return undef if $@;
        return wantarray ? @li : $ref;
}


Gibt aus: Hallo, ich lebe noch!

Var 2
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
my @y = foo( foo => 1, bar => 2, baz => 3) or die $@;
print "Hallo, ich lebe noch!\n";
sub foo{
        my %in = @_;
        # erstelle eine hashref UND eine liste
        my $ref = {};
        my @li  = ();
        eval{
                # zum Testen eine exception
                die "Something is wrong!\n";
                $ref = \%in;
                @li  = values %in;
        };
        return if $@;
        return wantarray ? @li : $ref;
}


Gibt das aus, was in $@ steht. Die Lösung heißt Variante 2, d.h., nicht return undef sondern einfach nur return für den Fall, dass in $@ was drinsteht.

Ansonsten lebt das Script weiter und der Fehler bleibt unbemerkt.

View full thread wantarray und return undef