in reply to Re: codeperl -pe 's/\n/
in thread codeperl -pe 's/\n/" " . /e' data/code

while I have no doubt that this is basicaly correct, I'm not convinced that it's 100%

My understanding of the situation is that the regular expression operator iterates over the entire string before it moves on to the "implicit" print. This makes the order

  1. The "while(<>)" reads "one\n"
  2. The s substitutes the "\n" in "one\n" with a space followed by the next line in the file ("two\n"), so $_ now contains "one two\n".
  3. Substitution operator now carries on examining $_, finds \n at the end "one two\n" etc.
  4. The implicit "print" (from the -p option) prints $_.

If it did the print as step three, surely you would end up with

one two
three four

Update nuance hangs his head in shame :-( I really will have to learn to read posts properly, of course the original node mentions joining pairs of lines. Doh!

As you can all see, my understanding was wrong.

Nuance

Baldrick, you wouldn't see a subtle plan if it painted itself purple and danced naked on top of a harpsichord, singing "Subtle plans are here again!"

Replies are listed 'Best First'.
RE: RE: Re: codeperl -pe 's/\n/
by ZZamboni (Curate) on May 26, 2000 at 19:59 UTC
    The purpose of the snippet is precisely to join the lines of the file two at a time. So yes, the output you give is the one you get, but that is the intended effect. The -p adds an implicit print at each iteration of the implicit loop.