* Nick Ing-Simmons wrote:
>>> Enocde 2.08, PerlIO::scalar 0.02, ActivePerl 5.8.2,
>>>
>>> #!perl -w
>>> use strict;
>>> use warnings;
>>> use Encode;
>>>
>>> my $string = encode(UTF16 => "");
>>>
>>> for (qw/UTF-8 UTF-16LE UTF-16BE UTF-32LE UTF-32BE/)
>>> {
>>> my $backup = $string;
>>> open F, "<:encoding($_)", \$backup;
>>> my $char;
>>> read F, $char, 1, 0;
>>> close F;
>>>
>>> die unless $backup eq $string;
>>> }
>
>There are no "readonly scalars" there.
It is opened for input according to `perldoc -f open` which suggests
that it should not be written to it. I would neither expect that the
code above modifies the scalar if it was opened for input and output
though, as I do not ask for any write operation. At least I am not
aware of documentation from which I should expect the behavior.
>Personally, I would be more motivated to fix whichever is at fault
>if you explain why you are trying to read one character from
>a stream with no characters in it (except a BOM).
I think I ran into this while looking for better Encode usage for my
HTML/XHTML/XML document encoding detection module HTML::Encoding which
needs to do some trial and error decoding; for example, the module
attempts to check the document for a byte order mark and currently does
so by encoding U+FEFF in suspected encodings and compares the resulting
octets with the octets of the document. Reading the first character from
the string and comparing it to U+FEFF might make more sense than that, I
thus looked into doing that and ran into this unexpected behavior.
--
Bj�rn H�hrmann � mailto:[EMAIL PROTECTED] � http://bjoern.hoehrmann.de
Weinh. Str. 22 � Telefon: +49(0)621/4309674 � http://www.bjoernsworld.de
68309 Mannheim � PGP Pub. KeyID: 0xA4357E78 � http://www.websitedev.de/