Re: :encoding() layer modifies read-only scalars

[email protected] (Bjoern Hoehrmann)
Newsgroups perl.unicode
Message-ID <[email protected]>
* 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/
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.