Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot
 
PerlMonks  

Re: replace multiple newline characters

by haukex (Archbishop)
on May 15, 2018 at 04:30 UTC ( [id://1214517]=note: print w/replies, xml ) Need Help??


in reply to replace multiple newline characters

The problem with the code you showed is that my @lines = <FILE>; reads the lines into the array, with each separate line in its own array entry, so the regex never sees more than one \n. One solution is to do what AnomalousMonk has already shown, by reading the entire file into one string. Here is one more way that reads the entire file into memory, using the "paragraph mode" supported by $/:

use warnings; use strict; use Data::Dump; open my $fh, '<', 'test.txt' or die $!; my @lines = do { local $/=''; <$fh> }; chomp @lines; close $fh; dd @lines; __END__ ("line1\nline2\n", "line4\n", "line7\nline8\n", "line9\n")

But you don't necessarily need to read the entire file into memory first, you can also do this operation line-by-line, as you're reading the file. For example:

open my $fh, '<', 'test.txt' or die $!; while (my $line = <$fh>) { print $line if length $line && $line ne $/; # - OR - push @newlines, $line if length $line && $line ne $/; # - OR - chomp($line); next unless length $line; print $line, "\n"; # etc. } close $fh;

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1214517]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others avoiding work at the Monastery: (7)
As of 2024-04-26 08:59 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found