#!/usr/bin/perl use warnings; use strict; use Data::Dumper; my %new_reports = ( 10 => 'Test1,Test2,Test3,Test4,Test5,Test6', 20 => 'Test4' ); print Dumper(\%new_reports); my @key_to_search = qw(10 20); my @element_to_delete = qw(Test2 Test4); foreach (@key_to_search) { if($new_reports{$_}) { my @sel_reports = split(/,/,$new_reports{$_}); map{ my $element_to_remove = $_; @sel_reports = grep { $_ ne $element_to_remove } @sel_reports; }@element_to_delete; if(scalar(@sel_reports) > 0) { $new_reports{$_} = join(",",@sel_reports); } else { delete $new_reports{$_}; } } } print Dumper(\%new_reports);