$ perl -Mstrict -Mwarnings -e ' use Data::Dumper; my @data = qw{ component=HF version=NULL sourcefile=filename1 sourcesum=checksumfile1 sourcefile=filename2 sourcesum=checksumfile2 sourcefile=filename3 sourcesum=checksumfile3 component=SVM version=10.0.70.102 sourcefile=filename4 sourcesum=checksumfile4 }; my (%compdata, $comp, $file); for (@data) { my ($key, $value) = split /=/; for ($key) { /component/ && do { $comp = $value; last }; /version/ && do { $compdata{$comp}{version} = $value; last }; /sourcefile/ && do { $file = $value; last }; /sourcesum/ && do { $compdata{$comp}{sources}{$file} = $value }; } } print Dumper \%compdata; ' $VAR1 = { 'SVM' => { 'version' => '10.0.70.102', 'sources' => { 'filename4' => 'checksumfile4' } }, 'HF' => { 'version' => 'NULL', 'sources' => { 'filename3' => 'checksumfile3', 'filename2' => 'checksumfile2', 'filename1' => 'checksumfile1' } } };