#!/usr/bin/env perl use strict; use warnings; use 5.010; my $original = [ { 'TaskA' => { 'maruti' => '20', 'honda' => '25', 'zen' => '25', 'hyundai' => '35', 'ford' => '22', 'toyota' => '11' } }, { 'TaskB' => { 'maruti' => '11', 'honda' => '22', 'zen' => '33', 'hyundai' => '33', 'ford' => '24', 'toyota' => '16' } }, { 'TaskC' => { 'maruti' => '12', 'honda' => '22', 'zen' => '33', 'hyundai' => '44', 'ford' => '55', 'toyota' => '66' } } ]; my $sorted = [ sort { (values(%$b))[0]->{hyundai} <=> (values(%$a))[0]->{hyundai} } @$original ]; use Data::Printer; p $sorted; #### \ [ [0] { TaskC { ford 55, honda 22, hyundai 44, maruti 12, toyota 66, zen 33 } }, [1] { TaskA { ford 22, honda 25, hyundai 35, maruti 20, toyota 11, zen 25 } }, [2] { TaskB { ford 24, honda 22, hyundai 33, maruti 11, toyota 16, zen 33 } } ]