BrowserUk's solution might be a little more clear (if a little less efficient) if it is viewed this way. Use one hash and one array. Store the initial set of file names as keys in a hash and store the second set in an array. You then only need to compare the list of files in the second set against the hash. Every file that doesn't exist in the hash can be deleted.
my %set01 = ();
$set01{$_} = 1 foreach (glob("*.*"); # identify each file in director
+y
..... # 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";
You can shorten/improve this code any number of ways but it does rather simply show what needs to be done
PJ
use strict; use warnings; use diagnostics;