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".
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".