Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery
 
PerlMonks  

Re: iterate through a hash with two keys

by MidLifeXis (Prior)
on Apr 29, 2013 at 17:34 UTC ( #1031266=note: print w/ replies, xml ) Need Help??


in reply to iterate through a hash with two keys

What you are doing is trying to assign a value, but not correctly. To assign $value, you could do something like this...

$hash{$_}{$label} = $value for 'a' .. 'h';
To print the value, use print, printf, or say with the same type of a structure.

--MidLifeXis


Comment on Re: iterate through a hash with two keys
Select or Download Code
Re^2: iterate through a hash with two keys
by fionbarr (Pilgrim) on Apr 29, 2013 at 18:02 UTC
    I am using xml_writer and I want to do this: for ('a' .. 'c') { $xml_writer->dataElement("LastName" => $t{A}{LastName}); } where the hash was filled by $t{A}{LastName} = "Smith"
Re^2: iterate through a hash with two keys
by hdb (Prior) on Apr 29, 2013 at 19:58 UTC

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

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

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

      --MidLifeXis

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1031266]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others browsing the Monastery: (10)
As of 2014-09-21 15:58 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    How do you remember the number of days in each month?











    Results (172 votes), past polls