It could have been done in 1 while loop, but i prefer 2 steps: 1st process the data, 2nd output the data. Then the code can be put in short subroutines, which i can easily create tests for them.
Output:#!/usr/bin/perl use strict; use warnings; use Data::Dumper; $Data::Dumper::Sortkeys = 1; $Data::Dumper::Terse = 1; my $file = 'perlmonk_1170305_02_data.txt'; open FH, $file or die "Couldn't open file: [$!]\n"; my $data = {}; my $hash = {}; while ( <FH> ) { my $line = $_; chomp $line; if ( $line =~ m/(-){2,}/ ) { # save all stored data if we see dashes line my $program = $hash->{Program} || ''; my $jira = $hash->{JIRA} || ''; if ( $program && $jira ) { push @{ $data->{ $program }{ $jira }}, $hash; $hash = {}; } } else { # store data in a temp hash my ( $key, $value ) = split /:\s*/, $line; $hash->{ $key } = $value; } } #print 'data = ' . Dumper( $data ); foreach my $prg ( sort keys %{ $data } ) { print "=========================================================== +=\n"; print " PROGRAM : $prg + \n"; print "=========================================================== +=\n"; foreach my $jira ( sort keys %{ $data->{ $prg }}) { print "******************\n"; print "JIRA ID : $jira\n"; print "******************\n"; foreach my $hash ( @{ $data->{ $prg }{ $jira }} ) { foreach my $key ( keys %{ $hash }) { # print the data except Program and JIRA next if $key =~ m/(Program|JIRA)/; print " $key => $hash->{ $key }\n"; } print "\n"; } } }
============================================================ PROGRAM : Development ============================================================ ****************** JIRA ID : COM-1234 ****************** rev => r345676 Reviewer => John Wick Description => Genral fix rev => r909276 Reviewer => None Description => Updating Received ============================================================ PROGRAM : Testing ============================================================ ****************** JIRA ID : COM-6789 ****************** rev => r876391 Reviewer => Balise Mat Description => Audited rev => r698392 Reviewer => Chan Joe Description => SO hwat rev => r327896 Reviewer => Chan Joe Description => Paid the Due
In reply to Re^3: Hash of Hash of Arrays
by duyet
in thread Hash of Hash of Arrays
by voltas
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |