use warnings; use strict; use Data::Dumper; my @arr = ( [12, "abc", 30], [24, "abc", 30], [26, "abc", 30], [14, "abc", 40], [46, "abc", 40], [2, "abc", 50] ); my %res; map { push @{$res{$_->[2]}}, $_ } @arr; warn Dumper values %res;