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