Thread Array of hashs (20 answers)
Opened by roli at 2005-03-02 23:06

Crian
 2005-03-03 17:40
#52257 #52257
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Hier ein Beispiel zur Verdeutlichung:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/usr/bin/perl
use strict;
use warnings;

use Data::Dumper; $Data::Dumper::Sortkeys = 1;

my %h1 = (qw/a 1 b 2 c 3 d 4/);
print "Adresse h1 -> ", \%h1, "\n";
print 'h1 : ', Dumper \%h1;

my $h2 = \%h1;
print "Adresse h2 -> ", $h2, "\n";
$h2->{c} = 33;
print 'h1 : ', Dumper \%h1;
print 'h2 : ', Dumper $h2;

my $h3 = { %h1 };
print "Adresse h3 -> ", $h3, "\n";
$h3->{d} = 44;
print 'h1 : ', Dumper \%h1;
print 'h3 : ', Dumper $h3;


Ausgabe:

Code: (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
Adresse h1 -> HASH(0x1a45960)
h1 : $VAR1 = {
'a' => '1',
'b' => '2',
'c' => '3',
'd' => '4'
};
Adresse h2 -> HASH(0x1a45960)
h1 : $VAR1 = {
'a' => '1',
'b' => '2',
'c' => 33,
'd' => '4'
};
h2 : $VAR1 = {
'a' => '1',
'b' => '2',
'c' => 33,
'd' => '4'
};
Adresse h3 -> HASH(0x1ae0c0c)
h1 : $VAR1 = {
'a' => '1',
'b' => '2',
'c' => 33,
'd' => '4'
};
h3 : $VAR1 = {
'a' => '1',
'b' => '2',
'c' => 33,
'd' => 44
};


Wie man sieht, ist die Referenz eines Hashes mit dem Hash auf gewisse Weise gleichbedeutend, da sie schließlich nur auf dessen Adresse verweist. Die Kopie (h3) hingegen liegt an einer anderen Speicherstelle und die Schlüssel wurden schön kopiert. Die Werte auch. Aber nur kopiert, nicht gecloned! (Siehe unten...)

Es folgt gleich noch ein zweites Beispiel zur Demonstration der "flachen" Kopien.\n\n

<!--EDIT|Crian|1109865025-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite

View full thread Array of hashs