Timothy Duke wrote: > > Hi, Hello,
> I have got two versions of a script to eliminate single line-feeds from > a file. You should use chomp() to remove newlines. Using the substitution operator globally is forcing the whole line to be scanned. > The first one does weird stuff - duplicating lines and messing > the text file up. That is because you are using '+<', the read/write mode. > The second one works (I copied it from a Perl guide), > but I don't understand why. That is because Perl's <> operator and the $^I variable do all the work behind the scenes of managing your file and the backup file. > I would much prefer the first one to work - > Can you tell me how to change the first one to make it work? Yes. > Also, I understand that the <> operator reads in one line at a time. It opens one "line" at a time where a "line" is defined by the value of the input record separator ($/) which is set to "\n" by default. > If > I wish to eliminate only triple line-feeds (\n\n\n) and leave double and > single linefeeds, I presume <> won't work. Without reading in the whole > file at once, how can I achieve this? Set the input record separator to paragraph mode. > ---------------------------------------------------- > > Version #1 (works dreadfully....stuffs up the file) > > #! perl -w -i > $filetobechanged = "iBook HD:Desktop Folder:tim.txt"; > open(FILE, "+< $filetobechanged") ; You should *ALWAYS* verify that the file opened correctly. > while (<FILE>) { > s/\n//g; > print FILE ; In read/write mode you read line one and then print over line two and then read line three and then print over line four, etc. > } > close(FILE); > > Version #2 (works fine) > $filetobechanged = "iBook HD:Desktop Folder:tim.txt"; > @ARGV = ($filetobechanged); > $^I = ".bak"; > while (<>) { > s/\n//g;; > print; > } If I understand correctly, you can achieve what you want like this: #! perl -w use strict; ( $/, $^I, @ARGV ) = ( '', '.bak', 'iBook HD:Desktop Folder:tim.txt' ); print while <>; However, since you seem to want to open the files yourself, you could do it like this: #! perl -w use strict; my $filetobechanged = 'iBook HD:Desktop Folder:tim.txt'; my $backup_file = "$filetobechanged.bak"; rename $filetobechanged, $backup_file or die "Cannot rename $filetobechanged, $backup_file: $!"; open BACK, '<', $backup_file or die "Cannot open $backup_file: $!"; open FILE, '>', $filetobechanged or die "Cannot open $filetobechanged: $!"; $/ = ''; # Set paragraph mode while ( <BACK> ) { print FILE; } close BACK; close FILE; __END__ 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>