my (%compdata, $comp, $file, @srcfiles); for (@data) { my ($key, $value) = split /=/; for ($key) { /component/ && do { $comp = $value; last }; /version/ && do { $compdata{$comp}{version} = $value; last }; /sourcefile/ && do { $file = $value; push (@($compdata{$comp}{$srcfiles}), $value); # <## component=HF version=NULL sourcefile=file10 sourcesum=checksum10 sourcefile=file2 sourcesum=checksum2 sourcefile=file3 sourcesum=checksum3 #### 'sources' => { 'file3' => 'checksum3', 'file2' => 'checksum2', 'file10' => 'checksum10' #### 'sources' => { 'file10' => 'checksum10' 'file3' => 'checksum3', 'file2' => 'checksum2',