Hi Chas., Jenda,

On Mon, May 11, 2009 at 6:00 PM, Chas. Owens <chas.ow...@gmail.com> wrote:

> On Mon, May 11, 2009 at 04:50, Jenda Krynicky <je...@krynicky.cz> wrote:
> > From: Raymond Wan <rwan.w...@gmail.com>
> >> I'm on a Linux system too; I guess I've used it for so long, I  forgot
> about
> >> the situations when binary/text does matter (i.e., Windows).  I see...so
> it
> >> doesn't matter.  That would make  sense since I just pipe to stdout
> right
> >> now and whether I'm sending "text" [ie.,  human-readable characters] or
> not,
> >> it  all seems to work fine...
> >
> > Well ... it seems, but it doesn't have to. Based on the locale
> > settings, if you do not binmode() the filehandle or open it with the
> > right IO layer specified, the stuff you print may undergo some
> > charset conversions.
> >
> > perldoc -f binmode says
> >
> > On some systems (in general, DOS and Windows-based systems) binmode()
> > is necessary when you're not working with a text file. For the sake
> > of portability it is a good idea to always use it when appropriate,
> > and to never use it when it isn't appropriate. Also, people can set
> > their I/O to be by default UTF-8 encoded Unicode, not bytes.
> >
> > In other words: regardless of platform, use binmode() on binary data,
> > like for example images.
> snip
>
> or the more modern:
>
> open my $fh, ">:raw", $filename
>    or die "could not open $filename: $!";
>
> from perldoc perlio[1]
>    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 passed as-is. The stream
>    will still be buffered.
>
> 1. http://perldoc.perl.org/PerlIO.html
>
>

I see.  I'm not writing image data, but my own data (sequence of 4-byte
integers), so I guess I should be using binmode anyway.

So, of the two (binmode  and :raw), the latter  is the newer/more modern
method?  With so many ways to do things in Perl,  I often don't know which
one is the more accepted one.

Thank you! I'll be sure to use :raw, even if I'm just writing to stdout.

Ray

Reply via email to