#! perl
use strict;
use warnings;
use Data::Dump;
my $RECORD =
[
{ NAME => 'J. Green', GRADE => 'P2', POSITION => 'HUMAN RESOURCES OFFICER' },
{ NAME => 'P. Smith', GRADE => 'P1', POSITION => 'FORESTRY OFFICER' },
{ NAME => 'T. Turner', GRADE => 'P1', POSITION => 'FORESTRY OFFICER' },
{ NAME => 'K. Turner', GRADE => 'P1', POSITION => 'FORESTRY OFFICER' },
{ NAME => 'R. Forest', GRADE => 'P5', POSITION => 'SENIOR OFFICER' },
{ NAME => 'R.Forest', GRADE => 'P5', POSITION => 'SENIOR OFFICER' },
{ NAME => 'K. King', GRADE => 'P5', POSITION => 'SENIOR OFFICER' },
{ NAME => 'K. King', GRADE => 'P3', POSITION => 'JUNIOR OFFICER' },
{ NAME => 'K. King', GRADE => 'P3', POSITION => 'POLICY OFFICER' },
{ NAME => 'K. King', GRADE => 'P1', POSITION => 'GENERAL OFFICER' },
{ NAME => 'K. King', GRADE => 'DG', POSITION => 'SENIOR DIRECTOR' },
{ NAME => 'K. King', GRADE => 'ADG', POSITION => 'JUNIOR OFFICER' },
];
my %grades;
push @{ $grades{$_->{GRADE}}{$_->{POSITION}} }, $_->{NAME} for @$RECORD;
dd \%grades;
####
23:51 >perl 1008_SoPW.pl
{
ADG => { "JUNIOR OFFICER" => ["K. King"] },
DG => { "SENIOR DIRECTOR" => ["K. King"] },
P1 => {
"FORESTRY OFFICER" => ["P. Smith", "T. Turner", "K. Turner"],
"GENERAL OFFICER" => ["K. King"],
},
P2 => { "HUMAN RESOURCES OFFICER" => ["J. Green"] },
P3 => { "JUNIOR OFFICER" => ["K. King"], "POLICY OFFICER" => ["K. King"] },
P5 => { "SENIOR OFFICER" => ["R. Forest", "R.Forest", "K. King"] },
}
23:51 >
####
for my $key (sort { substr($a, 0, 1) cmp substr($b, 0, 1) ||
substr($b, 0, 2) cmp substr($a, 0, 2) } keys %grades)
{
for my $pos (sort { $a cmp $b } keys %{ $grades{$key} })
{
my $names = $grades{$key}->{$pos};
my $count = scalar @$names;
print $count, ' ', $key, ' ', $pos, ' ', $names->[0], "\n";
print ' ', $names->[$_], "\n" for 1 .. $#$names;
}
}
####
23:51 >perl 1008_SoPW.pl
1 ADG JUNIOR OFFICER K. King
1 DG SENIOR DIRECTOR K. King
3 P5 SENIOR OFFICER R. Forest
R.Forest
K. King
1 P3 JUNIOR OFFICER K. King
1 P3 POLICY OFFICER K. King
1 P2 HUMAN RESOURCES OFFICER J. Green
3 P1 FORESTRY OFFICER P. Smith
T. Turner
K. Turner
1 P1 GENERAL OFFICER K. King
23:53 >