opendir my $DIR, '.' or die "Can't opendir . : $!\n"; my %single; my %other = (did => 'mrg', mrg => 'did'); while (my $file = readdir $DIR) { #print "$file\n"; my ($name,$ext) = ($file =~ /^(.*)\.(did|mrg)$/) or next; if (exists $single{"$name.$other{$ext}"}) { delete $single{"$name.$other{$ext}"}; } else { $single{$file} = undef; } } print "Unpaired files:\n"; foreach my $file (keys %single) { print "\t$file\n"; }