Brian wrote:
Hi
Hello,
ARGV0 will = AB7Z001 ARGV1 will = AB7Z002 ARGV2 will = 01/01/1900 I would like to read a file, locate AB7Z001 (but not AB7Z0011, so a space at position 8 in string ) Upon location of value in argv0 replace it with argv1. Then, at the first instance of a date replace it with argv2. Then, at the next instance of a date, replace it with "today's date". There will only be one instance of AB7Z001 in the file, but/so, is there a way to stop checking and go on to output after this "one event" So that, AB7Z001 blahblahblah 01/01/1485 moreblahblah evenmoreblahblah 01/01/1999 AB7Z0011 blahblahblah 01/01/1485 moreblahblah evenmoreblahblah 01/01/1999 will be AB7Z001 blahblahblah 01/01/1900 moreblahblah evenmoreblahblah 22/10/2008 AB7Z0011 blahblahblah 01/01/1485 moreblahblah evenmoreblahblah 01/01/1999 open (IN, "+<dummy.txt"); @file = <IN>; seek IN,0,0; foreach $file (@file){ $file =~ s/............................./g; <----------- ?? print IN $file; } close IN;
#!/usr/bin/perl use warnings; use strict; @ARGV == 3 or die "usage: $0 <search for> <replace with> <date>\n"; my ( $search, $replace, $date ) = @ARGV; my ( $day, $mon, $year ) = ( localtime )[ 3, 4, 5 ]; my $today = sprintf '%02d/%02d/%04d', $day, $mon + 1, $year + 1900; ( $^I, @ARGV ) = ( '', 'dummy.txt' ); while ( <> ) { if ( ?^$search ? ) { s/^$search/$replace/; s!\d\d/\d\d/\d{4}!$date! and s!($date.*?)\d\d/\d\d/\d{4}!$1$today!; } print; } __END__ John -- Perl isn't a toolbox, but a small machine shop where you can special-order certain sorts of tools at low cost and in short order. -- Larry Wall -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] http://learn.perl.org/