# ==> $keyptr, @inputs as in your code my $rg = join'|', map quotemeta, keys %$Keyptr; my @hits; push @hits, { /($rg):(.+?)(?=(?:$rg)|$)/g } for @inputs ; # thats it #### ... for my $rec (@hits) { print "====\n"; print "$_ => $rec->{$_}\n" for sort keys %$rec } ... #### ==== ANALYSIS => yada ^M yada CONCLUSION => drone drone ^M PREFACE => mumble ^M REMARKS => ixnay ==== ANALYSIS => Chuckle DEFERRED => blahblah ^M blah ^M NAME / NUMBER => John 369 REMARKS => Yada2