Thread Hash-Übergabe als Referenz ohne Bezug auf Original (26 answers)
Opened by marky at 2009-09-25 16:06

LanX-
 2009-09-26 17:39
#126260 #126260
User since
2008-07-15
1000 Artikel
BenutzerIn

user image
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)

View full thread Hash-Übergabe als Referenz ohne Bezug auf Original