http://qs321.pair.com?node_id=106334

brassmon_k has asked for the wisdom of the Perl Monks concerning the following question:

This should be easy for you guys but I never had to do it.

Okay I'm reading paragraphs in from $/
and splitting on the newline -
$/ = ""; while ($para = <>) { @lines = split(/\n/, $para); if (@lines == 1) { $lastHeading = $lines[0]; next; } if ($para =~ "mSOriginating") { if ($para =~ "$msisdn") { print "@lines"; } } }
My problem is when the results print it comes out all jumbled. It prints readable text from what it found but it doesn't print them out on newlines. It's just one line right after the other like constant text. Let's say you had the numbers 1 through 10 but you wanted them to print out on newlines for each number - Example:
What is happening: 12345678910 What I want: 1 2 3 4 5 etc....

How can I get the print to do that? I know it's something with "$\" (The output record separator) or the "-l" command handling option for PERL but I don't know how to use them and the books I'm using don't help much in that area.

The Brassmon_k

Replies are listed 'Best First'.
Re: print an array for paragraphs
by lestrrat (Deacon) on Aug 20, 2001 at 23:52 UTC

    split removes the separator from the resulting tokens:

    my $str = "1\n2\n3\n4"; my @tokens = split( /\n/, $str ); # now tokens contain # ( "1", "2", "3", "4" ), NOT ( "1\n", "2\n", "3\n", "4\n" )

    And no, $\ is not the output record separator, the output record separator is $,

       Update Above was not true, $\ is output record separator.
       $, was output field separator
    

    But then again, with your code I don't understand the reasoning to use split. you could just

    my $para = ..... # whatever. # so $para is ( possibly ) a multi-line parameter my $first_line_break = index( $para, "\n" ); if( $first_line_break > 0 ) { $lastHeading = substr( $para, 0, $first_line_break ); next; } if( $para =~ /mSOriginating/ && $para =~ /$msisdn/ ) { print $para; }

    This would do, no?

Re: print an array for paragraphs
by brassmon_k (Sexton) on Aug 20, 2001 at 23:42 UTC
    Nevermind I got the answer. All I had to do is print $para instead of messing around with all that formatting. DOH!
    print "$para";

    Sorry to bother ya again.

    The Brassmon_k
Re: print an array for paragraphs
by Cirollo (Friar) on Aug 20, 2001 at 23:44 UTC
    If you want to print @lines, with each element on a new line:
    $\ = "\n"; # puts a \n after each print print for @lines;