in reply to Re: iterate through a hash with two keys
in thread iterate through a hash with two keys

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" !!!

Replies are listed 'Best First'.
Re^3: iterate through a hash with two keys
by MidLifeXis (Monsignor) on Apr 29, 2013 at 20:03 UTC

    map { { $label => $value } } 1 .. 9?

    What you are doing is creating the hashref, and duplicating the same hashref that number of times.

    --MidLifeXis