Thread Hash by value als Sub-Parameter übergeben (18 answers)
Opened by KurtZ at 2008-02-06 19:55

betterworld
 2008-02-09 16:53
#105750 #105750
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
KurtZ+2008-02-06 18:55:13--
Code (perl): (dl )
1
2
3
4
5
sub routine {
my ($hash_ref1,$hash_ref2)=@_;
my %hash1=%{$hash_ref1};       #umkopieren
$hash1{key}="wert";                    #wirkt sich nicht auf ursprüngliches Hash aus
}  


$hash_ref1 brauch ich nur einmal ... geht das auch direkter???


Es aendert zwar nichts daran, dass Du $hash_ref1 nur einmal brauchst, aber man koennte das ein klein wenig kuerzer schreiben:
Code (perl): (dl )
1
2
3
4
sub routine {
    my ($hash_ref1,$hash_ref2)=@_;
    my %hash1=(%$hash_ref1, key => 'wert');
}


Wenn es Dich stoert, dass der Hash waehrend der Subroutine doppelt im Speicher liegt, kannst Du ja das hier machen:
Code (perl): (dl )
1
2
3
4
sub routine {
    my ($hash_ref1,$hash_ref2)=@_;
    $hash_ref1={%$hash_ref1, key => 'wert'};
}

Dann musst Du halt nur die späteren Aufrufe von $hash1{key} ändern zu $hash_ref1->{key}

Sachen wie $_[0] wuerde ich auch nicht zu viel verwenden. Sieht irgendwie doof aus und ist unuebersichtlich. Die uebergebenen Variablen immer explizit benannten Variablen zuzuweisen finde ich fuer die meisten Faelle am besten.

View full thread Hash by value als Sub-Parameter übergeben