use warnings; use strict; use File::Find::Rule; my $path = 'c:/sdf'; # path to look in my $sdf_file = 'c:/sdf_file.txt'; open my $fh, '<', $sdf_file or die "can't open the flippin' flackin' file!: $!"; my @sdf_files; while (<$fh>){ chomp; if (my ($file) = /fullpath="(.*)"$/){ # replace backslash to fwd slash, and lowercase $file =~ s|\\|/|g; $file = lc $file; push @sdf_files, $file; } } my @files = File::Find::Rule->file() ->name('*.sdf') ->in($path); for my $file (@files){ $file = lc $file; if (! grep {$file eq $_} @sdf_files){ print "deleting $file\n"; unlink $file or die $!; } }