#!/usr/bin/perl use strict; use warnings; use Data::Dumper; my @array = ( {a => 'b'}, {1 => 2}, {1 => 2}, ); my %seen; my @unique = map{ $_->[0] }grep{ !$seen{$_->[1]}++ }map{ [$_,flatten($_)] }@array; print Dumper \@unique; sub flatten{ my ($hashref) = @_; my $string = ''; while( my ($key,$val) = each %$hashref ){ $string .= $key . '_::_' . $val . '_::_'; } return $string; }