HIT key1 so start to process attrib1: base = FULL attribmsg: middle = MEDIUM ENDKEY HIT key2 so start to process attrib1: base = FULL ENDKEY HIT key9 so start to process attrib1: base = FULL ENDKEY #### open(FH,"<$file") || die ("cannot open file"); foreach my $key (sort keys %results){ local $/ = "ENDKEY\n"; while (my $line =~ /$key/){ if ($line =~ /\S+\s($key).*/){ my $keymatch = $1; $results{$keymatch}{attrib1} = 'null'; $results{$keymatch}{attribmsg} = 'null'; } if (/\s+(attrib1|attribmsg):.*=\s(\S+)/){ $results{$keymatch}{$1} = $2;} } }