my %groupMap = ( 'ABC' => 'groupA.txt', 'DEF' => 'groupB.txt', 'GHI' => 'groupC.txt' # and so on and so on ) #### foreach my $n (keys %emp) { my ($pattern,$file); while (($pattern,$file) = each %groupMap) { if ( $emp{$n}{'Org'} =~ /$pattern/ ) { saveEmpToFile($emp{$n}{'Emp'}, $file); } } } sub saveEmpToFile { my $emp = shift; my $file = shift; # note: openning for append open(OUTFILE, ">>$file"); print OUTFILE $emp; close OUTFILE; }