use strict; use Data::Dump qw(dump); my %HoH = (); my $rec; my $component; while ( ) { chomp; next unless m/^\S+/; if( m/^component=(.*)/ ) { $component = $1; $rec = {}; $HoH{$component} = $rec; } elsif( m/^version=(.*)/ ) { $rec->{"version"} = $1; } else { my ($key, $value) = split /=/; $rec->{$key} = $value; } } for my $component ( keys %HoH ) { print "$component: "; for my $key ( keys %{ $HoH{$component} } ) { print "$key=$HoH{$component}{$key} "; } print "\n"; } dump %HoH; __DATA__ component=HF version=NULL sourcefile=filename1 sourcesum=checksum1 sourcefile=filename2 sourcesum=checksum2 sourcefile=filename3 sourcesum=checksum3 component=SVM version=10.0.70.102 sourcefile=filename4 sourcesum=checksum4