Ken Hill wrote: > I have the following perl script that reads a fixed-width file and > replaces values in various sections of the file. > > ------------------------------------------- > open (IN, '< in.txt'); > open (OUT, '> out_test.txt');
You should verify that the files were opened successfully before trying to use possibly invalid filehandles. open IN, '<', 'in.txt' or die "Cannot open 'in.txt' $!"; open OUT, '>', 'out_test.txt' or die "Cannot open 'out_test.txt' $!"; > while (<IN>) { > > chomp; > > $first_section = substr $_, 0, 381; # extract the first > section of the record > $facilityno = substr $_, 381, 10; # extract the facilityno > field > $second_section = substr $_, 391, 1056; # extract the > second section of the record > $requestor_section=" " x 500; > # $requestor_section = substr $_, 1446, 499; # extract requestor > section of record > $third_section = substr $_, 1946, 4748; # extract third > section of record > > # print out the file with changed facilityno value ... > > print OUT "$first_section$\0039007300$\$second_section$\ > $requestor_section$\$third_section\n"; > > } > > close (IN); > close (OUT); > ------------------------------------------------ > > I want to place an "if...then" condition on the $facilityno value; such > that if the $facilityno value = 0000000000, then print out 999999999, > else print out the value of $facilityno. while ( <IN> ) { if ( '0000000000' eq substr $_, 381, 10 ) { substr $_, 381, 10, '999999999'; } print OUT; } Or, you could do it using a reference to the substring: while ( <IN> ) { my $field = \substr $_, 381, 10; $$field = '999999999' if $$field eq '0000000000'; print OUT; } John -- use Perl; program fulfillment -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>