Thread Hash-Übergabe als Referenz ohne Bezug auf Original
(26 answers)
Opened by marky at 2009-09-25 16:06
Oh je, mal wieder den Nagel auf den Kopf getroffen ...
(übrigens du rufst Data::Dumper falsch auf du musst eine Referenz übergeben!) Flat heißt hier auch nicht abflachen (flatten) der Datenstruktursondern nur dass der erste Level oberflächlich kopiert wird. Wie auch immer schau dir mal diesen Code im Debugger an, um den Unterschied zwischen Flat ($hrf) und Deep ($hrd) Kopien eines Hashrefs zu verstehen, am Ende siehst du am Output auch was wie klappt: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 DB<6> $hr={a=>{b=>{c=>1}}}; DB<7> $hrf={%$hr} DB<8> eval Data::Dumper->Dump ([$hr],['hrd']) # Deepcopy via eval der Serialisierung DB<9> print Data::Dumper->Dump ([$hr,$hrf,$hrd],[qw/hr hrf hrd/]) $hr = { 'a' => { 'b' => { 'c' => 1 } } }; $hrf = { 'a' => $hr->{'a'} }; $hrd = { 'a' => { 'b' => { 'c' => 1 } } }; DB<10> x $hr,$hrf,$hrd 0 HASH(0x8a4b000) 'a' => HASH(0x8a5f5c0) 'b' => HASH(0x87f36a0) 'c' => 1 1 HASH(0x8a5f770) 'a' => HASH(0x8a5f5c0) -> REUSED_ADDRESS 2 HASH(0x8af90d0) 'a' => HASH(0x8b154b0) 'b' => HASH(0x8a55af0) 'c' => 1 Last edited: 2009-09-26 17:45:21 +0200 (CEST) me and my writeups
|