http://qs321.pair.com?node_id=270142

Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

The below script does work and changes specific names on my web server where it starts from web root and changes ALL names in every directory. There are three names to change and the search and replace works recursively in every directory.

I would like as much input and/or critic on this script as possible so I can do the most efficient search and replace on my server. Please spare no feelings and give me as much input/critic to help make this script as best as possible.
use File::Find; use warnings; use strict; my @files; my $hit; my $line; my $ct = 0; my @data; sub NameReplace { if( $_ =~ /\.(?:html?|cfm|cfml|cgi|js|pl)$/) { my $name = $File::Find::name; open ( F, $name ) || warn "$!: $name\n"; while($line = <F>) { for $hit ($line =~ /(?:servername|servername\.aa\.company +\.zzzz\.com|servername\.aa\.company\.com)/gi) { $ct++; push (@files, $name); } } close F; } } find( \&NameReplace, "/webRootDirectory" ); foreach (@files) { open(DATA, "$_") or die "File does not open: $!"; @data = (<DATA>); close(DATA); open(DATA, ">$_") or die "File not open: $!"; foreach (@data) { s/servername\.aa\.company\.zzzz\.com/NEWNAME.\com/gi; s/\bservername\.aa\.company\.com\b/NEWNAME\.com/gi; s/\bservername\b/NEWNAME\.com/gi; print DATA $_; } close(DATA); } print "Total Count = $ct\n";