#!/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 ( ) { 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"; } } }