in reply to Re: Using binmode on ARGV filehandle? (open.pm)
in thread Using binmode on ARGV filehandle?

Thanks -- those are very helpful links. I found out from reading those that using the PERLIO environment variable does in fact provide the desired effect. For example, this script:
#!/usr/bin/perl -w binmode STDOUT, ":encoding(utf16)"; while (<>) { print; }
will correctly convert utf8 input to utf16 output, whether reading from STDIN or a list of one or more files in @ARGV, when I run it like this:
$ export PERLIO=:utf8 $ myscript *.utf8 ## works the same as: cat *.utf8 | myscript
Alas, if I just put  $ENV{PERLIO} = ":utf8"; into the script itself, this doesn't work. So to really free my script from undesirable environment dependencies, I could just make a wrapper script that sets $ENV{PERLIO}, then execs the actual filter script with @ARGV. Not exactly pretty, but not as ugly as other alternatives.

Replies are listed 'Best First'.
Re^3: Using binmode on ARGV filehandle? (exec)
by tye (Sage) on Jun 03, 2006 at 01:17 UTC

    You could use the same trick we use for fooling dynaloader or Oracle:

    BEGIN { if( ! $ENV{PERLIO} ) { $ENV{PERLIO}= ":utf8"; exec $^X, $0, @ARGV; } }

    - tye