in reply to Re^10: How do I display only matches
in thread (SOLVED) How do I display only matches

Note that on *nix, the "default text I/O layer" is probably effectively :raw and :crlf is not used unless requested, because the Unix convention is that text files store only <LF> at end-of-line and "\n" is <LF> in POSIX.

And the reason that you are supposed to specifically say "\015\012" instead of "\r\n" is that the latter is the current platform's notion of "carriage return/line feed" and might not be the ASCII CR/ASCII LF that is supposed to be used on the network. (I seem to recall that classic MacOS interpreted "\r\n" as "\012\015" as one example. I suspect EBCDIC systems may be even more bizarre.)

Edited 2019-10-01 by jcb: Clarify wording to address haukex's nitpick.

Replies are listed 'Best First'.
Re^12: How do I display only matches (updated)
by haukex (Archbishop) on Sep 28, 2019 at 08:10 UTC
    Note that on *nix, the "default text I/O layer" is probably :raw and :crlf is not used unless requested

    A bit of a nitpick, from PerlIO:

    :raw
    ... The implementation of :raw is as a pseudo-layer which when "pushed" pops itself and then any layers which do not declare themselves as suitable for binary data.

    The defaults on 5.28:

    $ perl -wMstrict -MData::Dump -e "dd PerlIO::get_layers(STDOUT)" ("unix", "perlio") C:\>perl -wMstrict -MData::Dump -e "dd PerlIO::get_layers(STDOUT)" ("unix", "crlf")

    Update: There appears to be a a bug in PerlIO::get_layers() that causes the :crlf layer to always be reported on Windows, even after a binmode. (But the PerlIO documentation does confirm the above defaults.)

      The default on *nix is equivalent to using :raw, which also creates a portability issue since binmode is unnecessary for handling binary data on POSIX — it "just works" until someone runs the program on Windows and bytes start disappearing. :-)

        The default on *nix is equivalent to using :raw, which also creates a portability issue since binmode is unnecessary for handling binary data on POSIX — it "just works" until

        Thanks for explaining this puzzling behavior, as seen by fiddling with haukex's oneliner (on darwin):

        
        perl -wMstrict -MData::Dump -e "dd PerlIO::get_layers(STDOUT)"
        ("unix", "perlio")
        
        perl -wMstrict -MData::Dump -e "STDOUT->binmode(':raw');dd PerlIO::get_layers(STDOUT)"
        ("unix", "perlio")
        
        perl -wMstrict -MData::Dump -e "STDOUT->binmode(':utf8');dd PerlIO::get_layers(STDOUT)"
        ("unix", "perlio", "utf8")
        
        perl -wMstrict -MData::Dump -e "STDOUT->binmode(':encoding(UTF-8)');dd PerlIO::get_layers(STDOUT)"
        ("unix", "perlio", "encoding(utf-8-strict)", "utf8")
        

        And what happens when you're reading from a mounted partition?

        Those who want raw data use binmode or :raw

        All others gamble