Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask
 
PerlMonks  

Re: building a hash of hashes with constant keys

by Zaxo (Archbishop)
on Nov 19, 2002 at 09:43 UTC ( [id://214063]=note: print w/replies, xml ) Need Help??


in reply to building a hash of hashes with constant keys

You can do that pretty conveniently. First set up the unchanging country list as an array (not with qw() since some countries have more than one word in the name):

my @countries = ( 'Algeria', 'Argentina', 'Zaire', );

Now prepare to read the data file,
my %HoH; open INFILE, '< /path/to/datafile.txt' or die $!;
The file contains our top level keys with colon as a delimiter, and the second level values in order corresponding to the country array (In my opinion that is a weakness of the design, a new country forming will wreck things for you). We will split each line first on colon to get the top key, then we'll do magic split on space to provide the values. We can get an efficient and compact assignment using a hash slice.
while (<INFILE>) { ( my $quarter, $_) = split ':'; @{$HoH{$quarter}}{@countries} = split " "; # repaired typo, ++petr +al }
Both lines in that read loop are a little unusual. my usually is seen outside the parens, but only $quarter is to be lexical. The rat's nest of curlies applies @ to a hash reference, setting up the slice. close INFILE or die $!; All done!

After Compline,
Zaxo

Replies are listed 'Best First'.
Re: Re: building a hash of hashes with constant keys
by mooseboy (Pilgrim) on Nov 19, 2002 at 21:03 UTC
    Thanks Zaxo, works a treat! Also thanks to Robartes for the Data::Dumper suggestion, it looks like an interesting alternative I ought to explore. I hope to post the complete code in a day or so, since this is very first Perl program I have ever written (hey, we all have to start somewhere) and I am sure the collective wisdom of the Monks will vastly improve my Initiate-level effort. Cheers, mooseboy

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others surveying the Monastery: (4)
As of 2024-04-19 05:11 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found