Link to home
Start Free TrialLog in
Avatar of erum87
erum87

asked on

Hashf a hash of a hash of a hash

Hi,
I need to write a code that sorts filenames under different environements.

The heirarchy is as shown below-
Environment
Plan (around 50 palns)
Chapter (over 300)
Milestone (1,2,3,4)
Platform (A,B)
Owner(around 30)
Filenames (over 10000)

There are several plans. And each plan has several chapters. A plan and chapter of the same name can be present in another environment.
Now each chapter has filenames with the details of their owner and the milestone and platforms they are related to. Despite having same names the chapters can and will have different content in different environment.
I need to access these filenames and print them out in the followwing format

Plan: the plan its accessing
Chapter: the chapter under that plan
Owner:Default owner (there can be multiple owners)
Platfrom: Default platform
Env : Default environemt

(milestone=1 , env= if its not the default env display the other env here)
#print files relevant to milestone 1 under that plan under that chapter
filename1
filename2
filename3
filename4
(milestone=2 , env= if its not the default env display the other env here)
filename5
filename6
filename7
(milestone=3 , env= if its not the default env display the other env here)
filename8
(milestone=4 , env= if its not the default env display the other env here)
filename9
filename10
filename11
filename12
filename13
filename14

If a plan has multiple chapters, it should print out multiple similar output for all chapters.
And it shoul depict change in environement, owner or platform in the milestone brackets.

Btw i'm sorting the data in excel and accessing an excel file. So first i dump the data in excel sort it and then access it. So everything is in an order.

Any help would be appreciated.
thanks
Avatar of erum87
erum87

ASKER

I need to create hashes of hashes for this. Something like $hash{$plan}{$chap}{$mlst}{$env}.....
Avatar of ozo
Do you have a question about creating $hash{$plan}{$chap}{$mlst}{$env}?
Is it not working the way you expect?
Avatar of erum87

ASKER

Well i have issues with creating a hash, yes.
Avatar of erum87

ASKER

And then also using it in foreach since it has so many layers to it
What issues are you having?
Avatar of erum87

ASKER

lets start with creating a multilayer hash. Do i need to declare it. If yes then how do i make it loop through plan first and within that plan, all the chapters and within that chapter all the testnames as per wrt milestones and environments.
ASKER CERTIFIED SOLUTION
Avatar of ozo
ozo
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
You do not need to declare it.
Avatar of erum87

ASKER

Thanks :)
Another doubt
i'm creating an array fro plan, chapter, milestone and then looping through it.
foreach $plan(@plan){
    foreach $chap(@chapter){
        foreach $mlst(@mlst){
                       
(Do i include the hashes here ? )
                      }
              }
}
Avatar of erum87

ASKER

And why did you create a hash reference in the print statement ?
If you already have the keys in arrays, then you don't need to get them from the hash
Avatar of erum87

ASKER

The reason i wanted to use hashes was tomake the keys unique, since there are multiple occurances of plan and chapters etc. So where do I declare it so that the hash can access it.
I did not create a hash reference in the print statement, I quoted the $ so it would print literally instead of interpolating a variable
You may want to declare
  my %hash;
or
  our %hash;
especially if you are under
  use strict refs;
Avatar of erum87

ASKER

I've requested that this question be closed as follows:

Accepted answer: 500 points for ozo's comment #37803998
Assisted answer: 0 points for erum87's comment #37803988

for the following reason:

helped me understand how to really access and lp thru layers of hashes :)
Avatar of erum87

ASKER

want more solutions