Leser: 20
1
2
3
4
5
6
7
=head2 test( $i )
=cut
sub test {
my $i = shift or die("Missing argument i.");
} # /test
1
2
3
4
5
6
7
=head2 test( $i )
=cut
sub test {
my $i = (defined $_[0] ? shift : die("Missing argument i."));
} # /test
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
QuoteThis is perl, v5.10.1 built for MSWin32-x64-multi-thread
use 5.10;
2009-12-21T21:17:03 lichtkindCode (perl): (dl )use 5.10;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
use 5.010; use Moose; use MooseX::Params::Validate; sub test { my ($self, %params) = validated_hash(\@_, i => {isa => 'Defined',}, ); return "$params{i} ist immer ein definierter Wert"; } my $obj = __PACKAGE__->new; say $obj->test(i => 'abc'); # ok say $obj->test(i => 0); # ok say $obj->test(i => undef); # nok say $obj->test; # nok
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
use MooseX::Declare; class Test { sub test (Defined $i) { return "$i ist immer ein definierter Wert"; } sub test2 (Int $i) { return "$i ist immer ein Integer\n"; } } my $obj = Test->new; say $obj->test('abc'); # ok say $obj->test(0); # ok say $obj->test(undef); # nok say $obj->test; # nok say $obj->test2('abc'); # nok say $obj->test2(0); # ok say $obj->test2(undef); # nok say $obj->test2; # nok
2009-12-21T20:12:59 pktmAber dann braucht man ja 2 Zeilen :)
Außerdem sieht das noch unschöner aus, wenn es irgendwo zwischen 5 eingelesenen Argumenten verteilt ist.
1 2 3 4 5 6 7 8 9 10 11
use Carp; ... sub foosub { my ($i, $x, $foo) = @_; croak "first argument must be positive" unless $i > 0; croak "too few arguments" unless defined $foo; # now start doing something ... }
QuoteDaher die Frage, ob man das noch irgendwie anders lösen kann. Perl ist ja dafür bekannt, mehrere Wege anzubieten.