note
Anonymous Monk
<i>He Googles for help</i><P>
<dl>
<dt>[google://utf16le site:perlmonks.org]</dt>
<dd>[id://649456]</dd>
<dd>[id://577311]</dd>
</dl>
<p>
<i>Can someone explain how this sequence of PerlIO layers works?</i><P>
See [doc://PerlIO]
<p>
<i>Why must so many layers be used?</i><P>
Because of the defaults, see [doc://PerlIO]<p>
<i>Can these layers be specified using the open pragma? If so, how? If not, why not? </i><P>
This should work
<c>
use open qw' IO :raw:perlio:encoding(UTF-16LE):crlf ';
</C>
but apparently open pragma is broken and doesn't accept the same things as [doc://binmode]/[doc://open]
<i></i><P>
<i>And why has this ancient Perl bug still not been fixed in 5.12.2?</i><P>
I'm not a perl5-porter so I'm not sure, but it doesn't look like a bug exactly, and nobodys come up with a better way, or reported a bug (that I could find).
<p>
<i>
It seems there's no way to generate a UTF-16 file in little-endian byte order directly. To generate such a file, you have to specify the UTF-16LE CES (which is wrong) and add the byte order mark explictly to make it UTF-16 instead of UTF-16LE.</i><p>
maybe
<tt>:encoding(UTF-16LE):via([mod://File::BOM])</tt>
868428
868428
14