Randy Kobes wrote:
Hi,
A recent change in Apache-Test/lib/Apache/TestRun.pm
involves an in-place edit, at around line 765:
local @ARGV = $config_file;
while( <> ) {
s/old/new/;
print;
}
Unfortunately, Win32 can't do such in-place edits:
for example,
perl -spi -e 's#old#new#' file.txt
won't work, but
perl -spi.bak -e 's#old#new#' file.txt
will.

sigh :( shouldn't the perlrun and perlvar manpages state that bug?

Would something like
   my $orig = $config_file . '.orig';
   rename $config_file, $orig or die "...";
   open(my $rfh, $orig) or die "...";
   open(my $wfh, '>', $file) or die "...";
   while(<$rfh>) {
       s{old}{new}g;
       print $wfh $_;
   }
   close $rfh;
   close $wfh;
   unlink $orig;
be OK?

Sure, will you do it?

But you can't use 'open my $fh', must use Symbol::gensym to support perl < 5.6. Also please drop () for consistency. Thanks.

But if you say that this works:

  perl -spi.bak

why not doing:

   local $^I = ".bak"; # windows can't do inplace edit
   local @ARGV = $config_file;
    while( <> ) {
        s/old/new/;
        print;
    }
    unlink "$config_file.bak";

much simpler.
__________________________________________________________________
Stas Bekman            JAm_pH ------> Just Another mod_perl Hacker
http://stason.org/     mod_perl Guide ---> http://perl.apache.org
mailto:[EMAIL PROTECTED] http://use.perl.org http://apacheweek.com
http://modperlbook.org http://apache.org   http://ticketmaster.com

Reply via email to