my %seen; @$ref = grep { ! $seen{$_->{id}}++ } @$ref; #### #!/usr/bin/env perl use strict; use warnings; use Data::Dump; my $ref = [ map { +{ id => $_ } } qw{a b c b} ]; dd $ref; my %seen; @$ref = grep { ! $seen{$_->{id}}++ } @$ref; dd $ref; #### [{ id => "a" }, { id => "b" }, { id => "c" }, { id => "b" }] [{ id => "a" }, { id => "b" }, { id => "c" }]