in reply to What does $/ = "\/\/\n"; mean?

Consider the following code.
#/usr/bin/perl -w use strict; { local $/ = "\/\/\n"; while (<DATA>) { #chomp; print "< $_ > \n"; } } __DATA__ first row second row // another first another second // one more (3.1) one more (3.2) //
As jeffa mentioned, the separator now will look for this sequence of characters (//\n) as a record separator. During the while loop, instead of reading one line, it will read up to this special separator.
The output will be:
< first row second row // > < another first another second // > < one more (3.1) one more (3.2) // >
You can easily see where each record begins and ends.
However, there is an additional effect of setting the $/ variable. It will also affect the behaviour of the chomp function.
Try it. Uncomment the line with the chomp function, and you will get this output instead:
< first row second row > < another first another second > < one more (3.1) one more (3.2) >
The entire separating sequence will be chopped out, but the inner newlines will stay untouched, because they were not separators. Actually, they are part of the string, so the chomp function does not affect them.
HTH

update It's a good policy to use local with $/ to avoid side effects if your script is dealing with other input as well.
_ _ _ _ (_|| | |(_|>< _|

Replies are listed 'Best First'.
Re: Re: What does $/ = "\/\/\n"; mean?
by blakem (Monsignor) on Jan 12, 2002 at 00:51 UTC
    Excellent demonstration (++) but it is misleading in one minor way.... Your example data is actually separated by "\n//\n", which is a bit different from the original question about the separator "//\n". Your example makes it sound like the data below consists of two records, when it is actually four.
    __DATA__ first row// second row // another first// another second //

    -Blake

      Thanks for your comment. I agree on the VISUAL misleading of the data. However, even though the data looks like it's divided by "\n//\n", the code is actually separating by "//\n" only, leaving one extra "\n" in the data after chomping.
      I presented the data that way because I has in mind fortunes files, where records are separated by a "\n%%\n".
      _ _ _ _ (_|| | |(_|>< _|