#!C:\Perl64\bin\perl.exe use strict; use warnings; 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 $previous_grade=''; my $previous_position=''; my %grade_count; my %position_count; my $C=0; for my $p ( sort { substr($$a{GRADE},0,1) cmp substr($$b{GRADE},0,1) || substr($$b{GRADE},0,2) cmp substr($$a{GRADE},0,2)} @$RECORD) { #for my $p ( sort { substr($$a{GRADE},0,1) cmp substr($$b{GRADE},0,1) || substr($$b{GRADE},0,2) cmp substr($$a{GRADE},0,2)} @{$AG{$A}}) { my( $grade, $name,$position ) = ( $p->{'GRADE'}, $p->{'NAME'},$p->{'POSITION'} ); my $pp=""; my $gg=""; if ($grade eq $previous_grade && $position eq $previous_position ) { $position=" "; $gg=$grade=" "; $pp=$position; $grade_count{$previous_grade}++; $position_count{$previous_position}++; } else { $gg=$p->{'GRADE'}; $pp=$p->{'POSITION'}; $grade_count{$previous_grade}++; $position_count{$previous_position}++; } if($grade_count{$previous_grade} == 1 && $position_count{$previous_position} == 1) { $C=$grade_count{$previous_grade}; print "$C"," ",$gg," ",$pp," ",$p->{NAME},"\n"; $grade_count{$previous_grade}++; $position_count{$previous_position}++; } elsif($grade_count{$previous_grade} > 1 && $position_count{$previous_position} > 1) { $C=$grade_count{$previous_grade}; print $C," ",$gg," ",$pp," ",$p->{NAME},"\n"; } $previous_grade = $p->{'GRADE'}; $previous_position = $p->{'POSITION'}; }