Toni: Parameter einlesen

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!

  1. 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

    --
    Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
  2. 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

    --
    ><o(((°>           ><o(((°>
       <°)))o><                     ><o(((°>o
    Der Valigator leibt diese Fische
    1. 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

      1. 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;
        }

        Was sagt dein Selbstversuch?

        Strebe eine Entwicklungsumgebung an, welche dir solche Testfälle selbst kurz beantwortet.

        mfg Beat

        --
        ><o(((°>           ><o(((°>
           <°)))o><                     ><o(((°>o
        Der Valigator leibt diese Fische
      2. 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.

        1. 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];

          Sehr schön!
          Die erste Variante ist mir am liebsten.
          Danke.