Leser: 1
![]() |
|< 1 2 >| | ![]() |
19 Einträge, 2 Seiten |
sid burn+2008-02-09 01:31:11--QuoteDas Problem des globalen Gültigkeitsbereiches kann man durch den Einsatz von local umgehen:
Dann kann man (und sollte man) auch gleich wieder lexikalische Variablen nehmen.
KurtZ+2008-02-06 18:55:13--Code (perl): (dl )1 2 3 4 5sub 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???
1 2 3 4
sub routine { my ($hash_ref1,$hash_ref2)=@_; my %hash1=(%$hash_ref1, key => 'wert'); }
1 2 3 4
sub routine { my ($hash_ref1,$hash_ref2)=@_; $hash_ref1={%$hash_ref1, key => 'wert'}; }
my %hash1=do { %$hash_ref1, key => 'wert' };
betterworld+2008-02-09 15:53:09--[...]
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 4sub routine { my ($hash_ref1,$hash_ref2)=@_; $hash_ref1={%$hash_ref1, key => 'wert'}; }
[...]
KurtZ+2008-02-09 18:59:26--
1 2 3 4 5 6 7 8 9
my %hash1 = ( karl => 'egon', key => 'wert1', ); my %hash2 = ( karl => 'egon', key => 'wert1', key => 'wert2', );
my %hash = (k0, v0, k1, v1, ...);
1 2 3 4 5 6 7 8
my %hash; { my @kv = (k0, v0, k1, v1, ...); while (@kv) { (my $k, my $v, @kv) = @kv; $hash{$k} = $v; } }
KurtZ+2008-02-09 18:59:26--aber dann verlassen mich meine Zauberkünste, klär mich bitte auf. :)
betterworld+2008-02-10 01:56:37--Hm, wie Du jetzt auf dieses do-Konstrukt kommst, weiß ich nicht.
murphy+2008-02-10 14:41:50--Ist eigentlich irgendwo dokumentiert, dass beim Bestücken eines Hashes aus einem Listenkontext alle Schlüssel-Wert-Paare sequentiell von vorne nach hinten abgearbeitet werden,
%by_name = reverse %by_address; # Invert the hash
murphy+2008-02-10 14:41:50--Code (perl): (dl )my %hash = (k0, v0, k1, v1, ...);
![]() |
|< 1 2 >| | ![]() |
19 Einträge, 2 Seiten |