In article <[EMAIL PROTECTED]>, [EMAIL PROTECTED] writes: >ok so $^ I is only for the diamond operator. Understood. So for >situations when not using the diamond operator, $^ I for making backup >copies is useless, so thr rename function will have to suffice. > >Is this the best way?
Usually you can use the diamond operator in any circumstances. Just put the filename in @ARGV and make the loop. See the example program below. Now, if you wonder, "But what if I want to print something to the usual default filehandle during that loop, e.g., to track progress?" then you can explicitly name the filehandle, usually STDOUT: print STDOUT "Reached line $. of input\n"; Note that <> will empty @ARGV when the loop is done. I can't think of any case where an in-place edit is intended that the diamond operator and $^I can't be used to accomplish it. >[EMAIL PROTECTED] (Peter Scott) >Take a look at what I wrote before: > -- >Nowhere do you use the contents of @ARGV. In-place edit only works >when you use the diamond operator (<>) for I/O, and you haven't. >So, having defined $^I and set @ARGV, you then need a loop: > > while (<>) { > # Do something with $_ > # print something to default filehandle > } > >Whatever you print to the default filehandle inside that loop will >go to the new file. > -- > >Here's a sample program, run it and see what it does, and experiment >with it if need be. Then you will understand how to use $^I. > >#!/usr/local/bin/perl >use strict; >use warnings; > >my $file = "INSERT NAME OF FILE TO MODIFY HERE"; >print "Starting in-place edit of $file\n"; > >($^I, @ARGV) = (".bak", $file); >while (<>) >{ > s/e/x/g; > print; >} > >print "Done in-place edit, now look at $file\n"; > > >Look also at "perldoc perlrun" under "-i". -- Peter Scott http://www.perldebugged.com/ *** NEW *** http://www.perlmedic.com/ -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>