In support of F. Xavier Noria, and in simpler terms - your $vars = { ..... } overwrote your previous assignment of $vars->{'key2'}.
Perhaps you could have done: my $var = {}; $var->{'key2'} = "some value"; my @args = qw/ XXX YYY ZZZ /; my @vals = qw/ AAA BBB CCC /; my $i; for ($i =0; $i < scalar(@args); $i++) { $vars->{$args[$i]} = $vals[$i]; } $var->{'key1'} = "some other value"; This would not have overwritten the $var->{'key2'} assignment. --Jon Robison "F.Xavier Noria" wrote: > > On Fri, 17 May 2002 17:10:53 +0300 (EEST) > Viljo Marrandi <[EMAIL PROTECTED]> wrote: > > : $vars->{'key2'} = "value of second key"; > > The hash $vars points to has a key named "key2". > > : $vars = { > : xxx => "AAA", > : yyy => "BBB", > : zzz => "CCC", > : }; > > Now you change the reference stored in $var. It points to an entirely > new hash, whose keys are "xxx", "yyy" and "zzz". > > : $vars->{'key1'} = "value of first key"; > > Here you add the key "key1" to the hash $vars points to. > > : Problem is, that value of key2 is lost after I set values to xxx, yyy and > : zzz, but key1 is ok. > > $vars contains a reference to a hash that has nothing to do with the > first one, you didn't create a key named "key2" in that hash. > > -- fxn