#!/usr/local/bin/perl use strict; use warnings; use Data::Dump qw/pp/; my %seen_file; my %Hash_filematches; my %Hash_filenames; while ( chomp(my $line = )){ (my $file_name) = $line; if ( ($file_name) and ( !$seen_file{$file_name}++ ) ) { foreach my $filename(keys %Hash_filenames) { print "FILE NAME $file_name\n"; @{ $Hash_filematches{ $filename } } = grep( /\/\Q$file_name\E#/i, @{ $Hash_filenames{ $filename } }); #@{ $Hash_filematches{ $filename } } = grep( (/\/\Q$file_name\E#/i && !/\.plf/), @{ $Hash_filenames{ $filename } });--------->@{ $Hash_filematches{ $filename } } stores only the grep of the last $file_name }#for loop end }#if file_name end for my $key (keys %Hash_filematches) { my $value = $Hash_filematches{$key}; if (scalar @$value) { # check that the arrayref isn't empty print "KEY: $key\n"; print "VALUES: ", join(", ", @$value), "\n\n"; } } } print pp(\%seen_file); #print pp(\%Hash_filematches); #print pp(\%Hash_filenames); __DATA__ file1 file2 file2 file3