#!/usr/bin/perl use strict; use warnings; use Data::Dumper; my $data = [ { 'prod_order' => '702164', 'operation' => '10', 'machine' => 'W01', }, { 'prod_order' => '702164', 'operation' => '10', 'machine' => 'W02', }, { 'prod_order' => '702164', 'operation' => '10', 'machine' => 'W01', }, { 'prod_order' => '702164', 'operation' => '10', 'machine' => 'W02', }, { 'prod_order' => '702164', 'operation' => '10', 'machine' => 'W03', }, { 'prod_order' => '702164', 'operation' => '100', 'machine' => 'W03', } ]; my %hash = (); my @newdata = grep { ! $hash{ $_->{operation} . $_->{machine} }++ } @$data; print Dumper @newdata; #### $VAR1 = { 'operation' => '10', 'prod_order' => '702164', 'machine' => 'W01' }; $VAR2 = { 'operation' => '10', 'prod_order' => '702164', 'machine' => 'W02' }; $VAR3 = { 'operation' => '10', 'prod_order' => '702164', 'machine' => 'W03' }; $VAR4 = { 'operation' => '100', 'prod_order' => '702164', 'machine' => 'W03' }; #### s**lil*; $*=join'',sort split q**; s;.*;grr; &&s+(.(.)).+$2$1+; $; = qq-$_-;s,.*,ahc,;$,.=chop for split q,,,reverse;print for($,,$;,$*,$/)