my %set01 = (); $set01{$_} = 1 foreach (glob("*.*"); # identify each file in directory ..... # code that creates secondary files # my @new_files = (); # keep a list of new files if you want my @set02 = glob("*.*"); foreach (@set02){ # push @new_files, $_ unless(exists($set01{$_})) unlink $_ unless(exists($set01{$_})); # delete files that weren't aren't in original set } print "original files\n",sort keys %set01,"\nnew files\n",sort @set02,"\n";