Meine Subroutine liest die übergebenen Parameter ein mit
($p1, $p2, $p3) = @_;
Du verwendest kein use strict? solltest du.
Wenn $p3 nicht vorhanden ist, könnte ich dies aus der Länge des arrays erkennen, kann ich aber auch $p3 direkt abfragen, ob es übergeben wurde (vorhanden ist)?
Ja, je nachdem was übergeben werden darf und was nicht. Die einfachst Variante wäre:
sub Sub {
my $p1 = shift;
my $p2 = shift;
my $p3 = shift || return;
....
oder in deiner Schreibweise:
sub Sub {
my ($p1, $p2, $p3) = @_;
return unless $p3;
Das geht aber nur, wenn $p3 nicht auch Null oder ein Leerstring enthalten darf. Dann musst du, wie Skrilax schon vorschlug, auf defined prüfen.
Struppi.