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.
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";
Back to
Seekers of Perl Wisdom