#! 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 >