use strict; use Data::Dumper; my %HoH = (); my $component; while ( my $line = ) { chomp $line; next unless $line =~ m/^\S+/; if ( $line =~ m/^component=(.*)/ ) { $component = $1; next; } next unless $component; if ( $line =~ m/^version=(.*)/ ) { $HoH{$component}{"version"} = $1; next; } if ( $line =~ m/^sourcefile/ ) { my ($k, $key) = split(/=/,$line); # READ THE NEXT LINE $line = ; chomp $line; if ( $line =~ m/^sourcesum/ ) { my ($v, $value) = split(/=/,$line); $HoH{$component}{'sources'}{$key} = $value; } } } for my $component ( keys %HoH ) { my $hash = $HoH{$component}; my $version = $hash->{'version'} || ''; my $sources = $hash->{'sources'} || {}; print "$component: \n"; print "version = $version\n"; for my $key ( keys %{ $sources } ) { print "$key = $sources->{$key}\n"; } print "\n"; } print Dumper(\%HoH);