Ktb wrote:
>
> The program below works as intended. It recursively searches
> directories and changes any instances of "spike.domain" to
> "spike.lib.domain" without making a backup (I will already have the
> directory backed up). There are two things I would like to have the
> program do that I'm having trouble with.
>
> 1) I would like to make it skip processing itself.
Are you saying that the program is in the same directory as the data
files? Why?
> 2) I would like it to print out the name of changed files.
>
> Two of my best attempts to make the modifications:
>
> 1) Changing the "if" statement to "if ((-f) && (! $0))"
> To me that says, "if it is a file and not program name."
> Trouble is when I run it no substitutions are made in the file.
> No errors reported either.
>
> 2) I have added, just outside the loop -
> print "Changed: $File::Find::name";
> This reports all files as having been changed instead of just files
> changed.
You need a flag to signal that changes were made.
> Any help appreciated:)
>
> #!/usr/bin/perl -i
> use strict;
> use warnings;
> use File::Find;
>
> my $dir = ".";
>
> find(\&edit_files, $dir);
> sub edit_files {
> if (-f) {
> my $file = $_;
> local @ARGV = ($file);
> while(<>) {
> s/spike\.domain/spike\.lib\.domain/;
> print;
> }
> }
> }
This is probably what you want.
#!/usr/bin/perl
use strict;
use warnings;
use File::Find;
use File::Basename;
my $prog = basename( $0 );
my $dir = '.';
find( sub {
return unless -f;
return if $_ eq $prog;
local( $^I, @ARGV, $_ ) = ( '', $_ );
my $change;
while ( <> ) {
$change++ if s/spike\.domain/spike.lib.domain/;
print;
}
print "Changed: $File::Find::name\n" if $change;
},
$dir );
__END__
John
--
use Perl;
program
fulfillment
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]