Independent of your solution to fionbarr's question and his real intention, I have tried to correct his code in the following way:
use strict; use warnings; my %hash; my $label = "label"; my $value = "value"; # this does not work !!! @hash{ 'a'..'h' } = ( { $label => $value } ) x 9; $hash{ 'a' }{ $label } = "newvalue"; print $hash{ 'b' }{ $label },"\n"; # is "newvalue" !!!
This results in a structure where $hash{'a'} to $hash{'h'} all point to the same hash, so changing one changes all of them.
Is there a way to have the x operator really create 9 independent hash refs? (If this is helpful here or not is a different question.)
The following code works but is too cumbersome.
use strict; use warnings; my %hash; my $label = "label"; my $value = "value"; # this works !!! @hash{ 'a'..'h' } = ( { $label => $value }, { $label => $value }, { $label => $value }, { $label => $value }, { $label => $value }, { $label => $value }, { $label => $value }, { $label => $value }, { $label => $value }, ); $hash{ 'a' }{ $label } = "newvalue"; print $hash{ 'b' }{ $label },"\n"; # is "value" !!!
In reply to Re^2: iterate through a hash with two keys
by hdb
in thread iterate through a hash with two keys
by fionbarr
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |