my %emp = (
987654 => { Emp=>'A. Employee', Org=>'ABC', '...'=> },
987653 => { Emp=>'A.N.Other', Org=>'DEF', '...'=> },
# .....
);
####
my %OrgEmp;
push @{ $OrgEmp{$_}{Org}}, $emp{$_}{Emp} for keys %emp;
####
my $re_org = qr[ '(' . join('|', qw[ABC DEF ...]) . ')' ]o;
my %OrgEmp;
for my $empNo (keys %emp) {
push @{ $OrgEmp{$1} }, $emp{$empNo}{Emp} if $emp{$empNo}{Org} =~ $re_org;
}
####
for my $org (keys %OrgEmp) {
open OUT, '>', 'Group' . $org or die $!;
print OUT "$_\n" for @{ $OrgEmp{$org} };
close OUT;
}
####
my %groups = map{
open my $fh, '>', "Group$_" or die $!;
$_ => $fh;
} qw[ABC DEF ...];
for my $empNo (keys %emp) {
for my $grp (keys %groups) {
#! Note the {} (bare block) around the filehandle are necessary.
print { $groups{$grp} } $emp{$empNo}{Emp} if $emp{$empNo}{Org} =~ m[$grp];
}
}