I asked this in another thread, no response maybe I can muster up one from this thread ;)
I was informed of the following: local ($^I, @ARGV) = (".bak", @sleepystart); while (<>) { $_ = "$db_name\n" if $. == 1; print; close ARGV if eof; } which will nab line one and change it to $db_name. I would like to ONLY muck with the files that have line one that differes from $db_name. I thought of this $_ = "$db_name\n" if ($. == 1 && $_ !~ /$db_name/); and $_ = "$db_name\n" if ($. == 1 && !~ /$db_name/); # which is the same as above seeing it is still using $_ in the background but no dice... could someone kindle point me in the right direction? regards -Ron > -----Original Message----- > From: Michael R. Wolf [mailto:[EMAIL PROTECTED]] > Sent: Wednesday, January 09, 2002 15:59 > To: [EMAIL PROTECTED] > Subject: Re: Inline file edit > > > [EMAIL PROTECTED] (Ronald Yacketta) writes: > > > This works great with one exception... the two values in > the sed need to be > > passed into the script... > > > > IE: > > changedbsid.pl OLDSID NEWSID filename(s) > > > > could be ran against 1 or more files at a time. > > > > I havethis which works like a champ on a SINGLE file > > > > #!/usr/bin/perl -w > > > > $^I = ".bak"; > > > > if ( @ARGV != 3 ) { > > print "You must supply two command line options\n"; > > print "The OLD TOEKN and the NEW TOEKN\n"; > > print "\n IE: $0 _VALUTEST _QAP2\n";; > > exit (1); > > } > > > > $OLD = $ARGV[0]; > > $NEW = $ARGV[1]; > > $FILES = $ARGV[2]; > > @ARGV = glob $FILES; > > while(<>) { > > s/\Q$OLD\E/$NEW/g; > > print; > > } > > > > my problem is with multiple files, I could axe the ARGV > check above.. but > > that wont get me anywhere I do not think... > > The changes I made: > > 1. Lower case variable names. More Perl-ish, and less eye > and shift-key strain. > > 2. Move the glob from Perl to the command line. That makes > @ARGV pre-populated with the filenames. (This may not > work on WinDOS systems. I don't know; I'm used to having > glob done by the Korn shell in Unix.) > > 2a. The program now works on STDIN by specifying no > filename arguments. (It may work by specifying "-" as > an argument; I forget). > > 2b. The program now works for multple file specifications. > It isn't limited to working with one file glob spec. > Specify 'em all on the line, it'll process 'em all. > > 3. Conditional setting of in-place editing argument. I'd > bet that it worked OK to set it for STDIN, but I don't > have a Perl installation on my traveling laptop to check, > so I played it safe by undef'ing it for STDIN > processing. > > 4. Shift off the required leading arguments rather than > accessing them directly through indices. This leaves > @ARGV to contain only the filenames. > > The changes I didn't (really) make: > > 1. My check for the number of args is basically the same as > yours. I mucked with it for my own personal style > reasons since I was alrady playing with ARGV for > globbing. > > Here's how I'd do it. > > ================================================================ > #!/usr/bin/perl -w > > $program_name = $0; > > # Print a usage message to STDERR > sub usage { > print STDERR "USAGE: $program_name old_token new_token > [files...]\n"; > } > > unless ( @ARGV >= 2 ) { > usage; > exit 1; > } > > $old_token = shift @ARGV; > $new_token = shift @ARGV; > > # Elements left in @ARGV are filenames. > # If @ARGV is empty, use STDIN. > # Make backups if there are filenames to process. > $^I = @ARGV ? ".bak" : undef; > > while(<>) { > s/\Q$old_token\E/$new_token/g; > print; > } > > -- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]