Thread 0 als Parameter prüfen (10 answers)
Opened by pktm at 2009-12-21 21:12

pktm
 2009-12-21 21:12
#129593 #129593
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Hallo!

Ich prüfe in meinen Subs gerne direkt beim shiften, ob eine Variable vorhanden ist oder nicht. Da es sich dabei so ziemlich nie um Wert ehandelt, die 0 sein können, sieht das so aus:
Code: (dl )
1
2
3
4
5
6
7
=head2 test( $i )

=cut

sub test {
my $i = shift or die("Missing argument i.");
} # /test


Aber, wenn das Argument 0 sein kann, funktioniert das nicht mehr, weil 0 als false evaluiert wird (so stelle ich mir das gerne vor).

Entsprechend muss der obige Code angepasst werden:
Code: (dl )
1
2
3
4
5
6
7
=head2 test( $i )

=cut

sub test {
my $i = (defined $_[0] ? shift : die("Missing argument i."));
} # /test


Das ist zwar in der Hinsicht schön, als dass die Fehlerbehandlung in der Zeile des shifts ist, aber es ist doch - um es mal sehr positiv auszudrücken - gewöhnungsbedürftig.

Natürlich kann man auch einfach drauf los shiften und hinterher den Wert prüfen:
Code: (dl )
1
2
3
4
5
6
7
8
=head2 test( $i )

=cut

sub test {
my $i = shift;
die("Missing argument i.") unless defined $i;
} # /test


Aber dann braucht man ja 2 Zeilen :)
Außerdem sieht das noch unschöner aus, wenn es irgendwo zwischen 5 eingelesenen Argumenten verteilt ist.

Daher die Frage, ob man das noch irgendwie anders lösen kann. Perl ist ja dafür bekannt, mehrere Wege anzubieten.

Grüße, pktm
http://www.intergastro-service.de (mein erstes CMS :) )

View full thread 0 als Parameter prüfen