Martin J. Evans <martin(_at_)easysoft(_dot_)com> writes:
Dan Kogai wrote:
On Tuesday, July 1, 2003, at 05:49 PM, Martin J. Evans wrote:
Nick Ing-Simmons wrote:
Martin J. Evans <martin(_at_)easysoft(_dot_)com> writes:
A socket is a file handle so :
binmode($sock,":utf8");
should work.
Nick's solution SHOULD BE enough but you should also try:
use Encode;
# ....
print $self->{_socket} encode('utf-8' => $string);
Works.
or
use Encode;
# ....
print $self->{_socket} encode_utf8($string);
Works.
or
binmode $self->{_socket} => ":encoding(utf8)";
# ....
print $self->{_socket}
Still generates a warning.
Same reason as binmode($sock,":utf8")
:-(
Thanks Dan. Your first two encode solutions work. I know it might be
pushing it a bit but any ideas why?
Yes. But why have we not discovered this months ago ...
I pulled the binmode example
straight from perldoc perluniintro so was surprised when it did not work
Likewise.
except I had a suspicion that IO::Socket::INET was not returning a file
handle.
It is.
I added a Devel::Peek Dump of the $sock and it does not appear
(to me) to be a handle:
SV = RV(0x811e9e8) at 0x8116b30
REFCNT = 1
FLAGS = (PADBUSY,PADMY,ROK)
RV = 0x826aca4
SV = PVGV(0x8118d88) at 0x826aca4
REFCNT = 1
FLAGS = (OBJECT,GMG,SMG)
IV = 0
NV = 0
MAGIC = 0x8118df8
MG_VIRTUAL = &PL_vtbl_glob
MG_TYPE = PERL_MAGIC_glob(*)
MG_OBJ = 0x826aca4
STASH = 0x8120310 "IO::Socket::INET"
NAME = "GEN0"
NAMELEN = 4
GvSTASH = 0x8127ad4 "Symbol"
GP = 0x8118dc0
SV = 0x826acb0
REFCNT = 1
IO = 0x826ad10
^^^^^^^^^^^^^^ there is the guts of the handle-ness.
The snag is that sockets have _two_ PerlIO * - hiding in the IO
and binmode only messes with IoIFP but print uses IoOFP
FORM = 0x0
AV = 0x0
HV = 0x826acec
CV = 0x0
CVGEN = 0x0
GPFLAGS = 0x0
LINE = 94
FILE = "/usr/local/lib/perl5/5.8.0/Symbol.pm"
FLAGS = 0x0
EGV = 0x826aca4 "GEN0"
Thanks again.
Martin
--
Nick Ing-Simmons
http://www.ni-s.u-net.com/