Alexander (HH): Hash an Unterfunktion

Beitrag lesen

Moin Moin!

test(a => 25, b => 33);

sub test{
my %p = map{$_}@_;

Das map ist über.

  
  (my %p)=@_;  
[/perl]  
  

>  # Vorbelegen  
>  $p{a} ||= 'default';  

Schade, dass Perl Deine Kommentare nicht versteht.  
  
Wenn Du Die Funktion mit a=>0 oder a=>'' aufrufst, wird $p{'a'} auf 'default' gesetzt. Das ist nicht immer das, was Du willst.  
  
[code lang=perl]  
  $p{'a'}//='default'; # perl >= 5.10  
  $p{'a'}='default' unless defined $p{'a'}; # perl < 5.10  

Und wenn auch undef erlaubt sein soll:

  
  $p{'a'}='default' unless exists $p{'a'}; # alle Versionen  

Wenn Du wirklich eine Vorbelegung haben willst, weise die Default-Werte vor @_ zu und überschreibe dann mit @_:

  
  my %p=( a => 'default', @_); # Perl garantiert, dass der LETZTE Key gewinnt  

Etwas Paranoia hinsichtlich der Anzahl der Elemente in @_ wäre auch nicht schlecht:

  
  @_%2 && die "Expected a hash"; # sonst gibt es 'Odd number of elements in hash assignment'  

Der Weg über eine Hash-Referenz bietet sich in vielen Situationen ebenfalls an, die Variante oben nutze ich eigentlich nur für benannte Parameter.

Alexander

--
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".