#!/usr/bin/perl use strict; use warnings; use Data::Dumper; use Array::Utils qw(:all); my %HoA1 = ( Fruits => [ "Apple", "Orange", "Banana", "Grapes" ], Fruits1 => [ "WaterMellon" ], ); my %HoA2 = ( Fruits => [ "Apples", "Orange", "pineapple", "Grapes" ], Fruits1 => [ "Mellon" ], ); my @AoAValues1 = sort values %HoA1; my @AoAValues2 = sort values %HoA2; my %hash; for (0 .. $#AoAValues1) { $hash{$_} = [ array_minus( @{$AoAValues2[$_]}, @{$AoAValues1[$_]} ) ]; } print Dumper \%hash; __END__ $ perl test.pl $VAR1 = { '0' => [ 'Apples', 'pineapple' ], '1' => [ 'Mellon'