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

In my defence  ;-) I was just trying to do a direct translation.   If I was going to do it in idiomatic Perl I would have done it differently.

perldoc PerlIO [ SNIP ] :raw The ":raw" layer is defined as being identical to calling " +binmode($fh)" - the stream is made suitable for passing binary data i.e. each byte is pas +sed as-is. The stream will still be buffered.


Also, you should always verify that open worked correctly before trying to use its filehandle.

   :-)

Replies are listed 'Best First'.
Re^4: help in ruby code to perl
by ikegami (Patriarch) on Sep 20, 2009 at 17:51 UTC

    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

      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.