Ich habe mich danach nur gewundert, dass ich sinnvollerweise mit der Anzahl der Parameter arbeiten muss und nicht gezielt mit dem einzelnen Parameter.
Was machst du eigentlich, wenn p1 und p3 statt p1 und p2 übergeben werden? In beiden Fällen hat @_ die Länge 2.
Wobei dann p2 explizit undef sein muss. eigentlich ist das alles eine eindeutige Sache, lediglich die Rahmenbedingungen kennen wir nicht. also welche werte zugelassen werden dürfen und welche nicht, statt sich darüber auszulassen hat es der OP vorgezogen beleidigte Leberwurst zu spielen.
und um das ganze zu veranschaulichen:
test(1, 2, 3);
test(1, 0, 3);
test(1, '', 3);
test(1, undef, 3);
sub test {
my $param = scalar @_;
print "Anzahl Parameter: $param (@_)\n";
my $p1 = shift;
my $p2 = shift;
my $p3 = shift;
printf '$p1(%s)', (defined $p1 ? 'definiert' : 'undefiniert');
printf ' - $p2(%s)', (defined $p2 ? 'definiert' : 'undefiniert');
printf ' - $p3(%s)', (defined $p3 ? 'definiert' : 'undefiniert');
print "\n";
printf '$p1(%s)', ($p1 ? 'wahr' : 'falsch');
printf ' - $p2(%s)', ($p2 ? 'wahr' : 'falsch');
printf ' - $p3(%s)', ($p3 ? 'wahr' : 'falsch');
print "\n\n";
}
Struppi.