#!/usr/bin/perl use strict; use warnings; use Data::Dumper; use constant FRUIT => 0; use constant VEGGIE =>1; my @food; push @food, { name => "apple", type => FRUIT }; push @food, { name => "banana", type => FRUIT }; push @food, { name => "orange", type => FRUIT }; push @food, { name => "broccoli", type => VEGGIE }; push @food, { name => "grape", type => FRUIT }; my @sorted = sort { $a->{type} <=> $b->{type} or $a->{name} cmp $b->{name} } @food; print Dumper(\@sorted); __END__ $VAR1 = [ { 'name' => 'apple', 'type' => 0 }, { 'type' => 0, 'name' => 'banana' }, { 'type' => 0, 'name' => 'grape' }, { 'name' => 'orange', 'type' => 0 }, { 'type' => 1, 'name' => 'broccoli' } ]; #### my %ranking = ( 1 => 0, 2 => 1, 5 => 2, 10 =>3 );