KyussRyn has asked for the wisdom of the Perl Monks concerning the following question:
Dear PerlMonks,
This is not as simple as the title suggest. The problem I have is that I have the below code:
This is all good and wonderful and the world turns as it should (well my code compiles and runs);#!c:\Perl\bin\perl use warnings; use strict; use diagnostics; use constant KANRI_01_0 => 0x00000001; # TBC use constant KANRI_01_1 => 0x00000002; # TBC use constant KANRI_02_0 => 0x00000004; # TBC use constant KANRI_02_1 => 0x00000008; # TBC use constant KANRI_03_0 => 0x00000010; # TBC use constant KANRI_04_1 => 0x00000020; # TBC use constant KANRI_04_2 => 0x00000040; # TBC use constant KANRI_04_3 => 0x00000080; # TBC use constant KANRI_04_4 => 0x00000100; # TBC use constant KANRI_05_1 => 0x00000200; # TBC use constant KANRI_05_2 => 0x00000400; # TBC use constant KANRI_06_1 => 0x00000800; # TBC use constant KANRI_07_1 => 0x00001000; # TBC use constant KANRI_07_2 => 0x00002000; # TBC use constant KANRI_07_3 => 0x00004000; # TBC use constant KANRI_07_4 => 0x00008000; # TBC use constant KANRI_07_5 => 0x00010000; # TBC use constant KANRI_08_1 => 0x00020000; # TBC my %menuHash = ( Outer1 => { O1Inne1 => KANRI_04_1, O1Inne2 => KANRI_04_2, O1Inne3 => KANRI_04_3, O1Inne4 => KANRI_04_4, } , Outer2 => { O2Inne1 => KANRI_05_1 }, Outer3 => { O3Inne1 => KANRI_06_1 }, Outer4 => { O4Inne1 => KANRI_07_1, O4Inne2 => KANRI_07_2, O4Inne3 => KANRI_07_3, O4Inne4 => KANRI_07_4, O4Inne5 => KANRI_07_5, }, Outer5 => { O5Inne1 => KANRI_08_1 }, ); for my $mainMenuItem ( keys %menuHash ) { print $mainMenuItem."\n"; for my $subMenuItem ( keys %{ $menuHash{$mainMenuItem} } ) { print "$subMenuItem = $menuHash{$mainMenuItem}{$subMenuIte +m} "; } print "\n"; }
Now the problem I have is in the output. See I was expecting something like:
And if I got this it would be great... but I didn't. I got:Outer1 01Inne1 = 32 01Inne2 = 64 01Inne3 = 128 01Inne4 = 256 Outer2 02Inne1 = 512 etc....
Now I am running Strawberry Perl 5.12.1 on Windows XP, using the Eclipse EPIC IDE. I have ran this code from the CMD line, in Eclipse, and also through my web server as well. It all comes out like this.Outer4 O4Inne5 = 65536 O4Inne3 = 16384 O4Inne2 = 8192 O4Inne4 = 32768 + O4Inne1 = 4096 Outer2 O2Inne1 = 512 Outer1 O1Inne2 = 64 O1Inne4 = 256 O1Inne3 = 128 O1Inne1 = 32 Outer5 O5Inne1 = 131072 Outer3 O3Inne1 = 2048
What I am wanting to do is for it to print out the contents of the Hash of Hashes in the order they have been set up in. In this example the hash keys can be sorted, but in my actual code they can't (as they are alphanumerical and I don't want them sorted in that order), same with the values as well.
The reason for this structure is so that I can use this hash to print out two different levels of menu's (using CGI/HTML) and easily track the menu structure through this hash.
Would someone please be so kind as to point me in the direction of where I can find out what is causing this strange behavior (well it is strange from my POV).
I have searched on google for "problem with printing hashes", "printing order of hashes" and "sorting hashes" along with searching Perlmonks for "printing hashes", but have been unable to find anything on this particular problem. Only on using different sort methods.
Thank you in advance for taking the time at looking at this problem and for any suggestions you can offer. I will post the solution on this thread when I have one as well for others with a similar problem.
I have posted some dummy code similar to my end solution for printing a two layer HTML menu using constants as keys for hashes in this thread. This link will take you directly to the node.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Problem with printing a Hash of Hashes in order
by GrandFather (Saint) on Jan 27, 2011 at 05:14 UTC | |
by AnomalousMonk (Archbishop) on Jan 27, 2011 at 05:29 UTC | |
|
Re: Problem with printing a Hash of Hashes in order
by toolic (Bishop) on Jan 27, 2011 at 03:39 UTC | |
|
Re: Problem with printing a Hash of Hashes in order
by Khen1950fx (Canon) on Jan 27, 2011 at 09:21 UTC | |
by KyussRyn (Acolyte) on Jan 28, 2011 at 02:08 UTC | |
|
Re: Problem with printing a Hash of Hashes in order
by KyussRyn (Acolyte) on Jan 27, 2011 at 06:55 UTC | |
|
Re: Problem with printing a Hash of Hashes in order
by KyussRyn (Acolyte) on Jan 28, 2011 at 02:28 UTC |