in reply to Re^3: help in ruby code to perl
in thread help in ruby code to perl

binmode($fh, ':raw'); is the same thing as binmode($fh);, but they're not the same as using :raw with open.

Using binmode :raw disables layers that can be disabled. This doesn't disable buffering if the underlying layer does any.

Using open :raw prevents some layers from being added in the first place, and this has been shown to prevent buffering.

$ perl -le'open $fh, "<", "foo"; print for PerlIO::get_layers($fh)' unix perlio $ perl -le'open $fh, "<", "foo"; binmode $fh; print for PerlIO::get_la +yers($fh)' unix perlio $ perl -le'open $fh, "<", "foo"; binmode $fh, ":raw"; print for PerlIO +::get_layers($fh)' unix perlio $ perl -le'open $fh, "<:raw", "foo"; print for PerlIO::get_layers($fh) +' unix

Replies are listed 'Best First'.
Re^5: help in ruby code to perl
by jwkrahn (Abbot) on Sep 20, 2009 at 18:44 UTC

    I'm sorry, I can not find anything in the documentation (so far) that says that open and binmode do different things with :raw.    Could you point me in the right dirrection please?

    Update: Perhaps you are thinking of this section of PerlIO:

    To get an un-buffered stream specify an unbuffered layer (e.g. +":unix") in the open call: open($fh,"<:unix",$path)

      Could you point me in the right dirrection please?

      I don't know it to be in the docs.

      And from what I see, it actually contradicts PerlIO which claims :raw only pops layers that aren't compatible with binary data.

      Perhaps you are thinking of this section of PerlIO:

      No, I know this from PerlMonks discussions.