in reply to how do i force a script to execute even when it encounters an error?

Your code is basically
foreach my $file (@files){ ... mkdir(...) or die("..."); move(...) or die("..."); ... }
So change it to
foreach my $file (@files){ ... mkdir(...) or do { warn("..."); next }; move(...) or do { warn("..."); next }; ... }

or

foreach my $file (@files){ if (!eval { ... mkdir(...) or die("..."); move(...) or die("..."); ... 1; }) { die("Error processing file $file: $@"); } }

Update: Better yet, use a sub!

sub process_file { my ($file) = @_; ... mkdir(...) or die("..."); move(...) or die("..."); ... } foreach my $file (@files){ if (!eval { process_file($file); 1 }) { die("Error processing file $file: $@"); } }