Parameter einlesen
Toni
- perl
Hi,
meine Unterroutine hatte bisher 4 Parameter und die habe ich gelesen mit
my ($p1, $px, $p123, $pwy) = @_;
Jetzt erwartet sie bei einem bestimmten Wert von $p1 einen 5. Parameter.
Wie lese ich diesen am besten ein?
if ($p1 eq 'aaa') { ?????? }
Danke!
Hi,
meine Unterroutine hatte bisher 4 Parameter und die habe ich gelesen mit
my ($p1, $px, $p123, $pwy) = @_;
Ja, das ist so üblich, aber macht Arbeit, wenn mal was geändert werden soll.
Jetzt erwartet sie bei einem bestimmten Wert von $p1 einen 5. Parameter.
Wie lese ich diesen am besten ein?
Gib eine Hashreferenz in die Unterfunktion. Die Referenz ist eine Sammlung von Parametern:
my $p = {
name => 'Hansel',
vname => 'Ulrich',
ort => 'Schweinford',
fam => 'ledig',
tel => '333',
}
sub function{
my $p = shift;
if($p->{fam} eq 'ledig'){ print "Ruf an: $p->{tel}" }
}
Horst Otto
meine Unterroutine hatte bisher 4 Parameter und die habe ich gelesen mit
my ($p1, $px, $p123, $pwy) = @_;
Jetzt erwartet sie bei einem bestimmten Wert von $p1 einen 5. Parameter.
Wie lese ich diesen am besten ein?
if ($p1 eq 'aaa') { ?????? }
my ($p1, $px, $p123, $pwy, $optional) = @_;
if ($p1 eq 'aaa') {
defined( $optional ) or $optional = 'defaultwert';
# go on
}
Ich würde sagen, dass benannte Parameter für dich besser geeignet sind
somesub( {a=>$a,b=>$b} ); #Hashreferenz Reihenfolge der Argumente egal
sub somesub{
my $param = shift; #hashreferenz
if( $param->{a} == 42 ){ ... }
}
mfg Beat
my ($p1, $px, $p123, $pwy) = @_;
Werden hier nur die vier ersten Parameter eingelesen, auch wenn 5 angegeben wurden?
Falls ja, ginge dann nicht auch
if ($p1 eq 'aaa') {
my $optional = shift;
}
?
Gruß
Toni
my ($p1, $px, $p123, $pwy) = @_;
Werden hier nur die vier ersten Parameter eingelesen, auch wenn 5 angegeben wurden?
Falls ja, ginge dann nicht auchif ($p1 eq 'aaa') {
my $optional = shift;
}
Was sagt dein Selbstversuch?
Strebe eine Entwicklungsumgebung an, welche dir solche Testfälle selbst kurz beantwortet.
mfg Beat
my ($p1, $px, $p123, $pwy) = @_;
Werden hier nur die vier ersten Parameter eingelesen, auch wenn 5 angegeben wurden?
Nein, das ist nur eine Zuweisung, das Array @_ bleibt vollständig erhalten.
Falls ja, ginge dann nicht auch
if ($p1 eq 'aaa') {
my $optional = shift;
Nein, damit erhälst du nur den ersten Wert des Array, also das was in $p1 steht.
Du hast zwei Möglichkeiten (neben dem kompletten ändern des Parametertyps)
1. den optionalen Parameter direkt einlesen
my ($p1, $px, $p123, $pwy, $optional) = @_;
2. auf das 5. Element des Arrays @_ zugreifen
my $optional = $_[4];
Struppi.
Du hast zwei Möglichkeiten (neben dem kompletten ändern des Parametertyps)
- den optionalen Parameter direkt einlesen
my ($p1, $px, $p123, $pwy, $optional) = @_;
- auf das 5. Element des Arrays @_ zugreifen
my $optional = $_[4];
Sehr schön!
Die erste Variante ist mir am liebsten.
Danke.