Thread Mit "defined" wird hash key angelegt. (6 answers)
Opened by BobderHund at 2012-04-25 20:36

pq
 2012-04-25 23:55
#157854 #157854
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
weder mit defined noch mit exists wird ein hashkey angelegt, der abgefragt wird. das ist ein häufiges missverständnis bei autovivification. erst dereferenzierung legt einen key an, also eine operation, bei der perl den key erst anlegen muss, um eine weitere abfrage durchzuführen:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ perl -wE'
my %hash = ( a => 1 );

if (defined $hash{b}) { 1 }
say "defined b: ",keys %hash;
if (exists $hash{c}) { 1 }
say "exists c: ", keys %hash;

if (defined $hash{B}->{foo}) { 1 }
say "defined deref B: ", keys %hash;
if (exists $hash{C}->{foo}) { 1 }
say "exists deref C: ", keys %hash;
'
defined b: a
exists c: a
defined deref B: aB
exists deref C: aCB


man sieht, dass bei den einfachen defined und exists nichts angelegt wird, aber behandelt man den *wert* des keys selber als hash, wird er automatisch angelegt. also z.b. $hash{key}->{weiterer_key} oder %{ $hash{key} }
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem

View full thread Mit "defined" wird hash key angelegt.