in reply to Re^11: 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 :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.)

Replies are listed 'Best First'.
Re^13: How do I display only matches (updated)
by jcb (Parson) on Sep 28, 2019 at 21:34 UTC

    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

        Technically, even / is a mount point — or are you talking about the (raw) devices?

        You are wrong. The binmode FILEHANDLE operator in Perl is a no-op on POSIX, just as the binary mode option to fopen(3) is a no-op on POSIX. I said this was a portability problem, and it is a portability problem, but programs that never use binmode will handle binary data just fine on POSIX. They will fail on other systems where text and binary streams are actually different.