in reply to One-shot code critique

A couple of things, first is just a matter of preference, but on this:
open FILE, "$dir\\$file" or die "Can't open $dir\\$file: $!";
I find the double backslashes ugly, and on Windows you can pretend you have a Unix file system, and just use a single forward slash, which looks alot better IMHO.

Second, correct me if I'm wrong, but I don't see any variables in your $target, $target2, or $replace variables, which makes them constant strings, and as such I would define them outside the loop, and on your substitution statement I would use the '/o' modifier (see perldoc perlre).

Last, you're checking the status of your opendir and your first open, which is good, but your not checking the status of your lastopen, which is bad.

Update: Also, use 'here docs', e.g.:

my $target = <<ENDHTML; <html> <head> <title>[^>]*</title> <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> </head> <body bgcolor=["]#FFFFFF["]> ENDHTML