Hi.
I've noticed that when setting $r->user($value) if $value is a string
with the UTF8 flag on, calling $r->user returns the string without the
UTF8 flag on again.
In other words, this code:
use Devel::Peek;
$r->user($user);
warn Dump($user);
warn Dump($r->user);
If I pass $user = "úser"
the Dump of $user outputs
SV = PV(0x7f8a48d850b0) at 0x7f8a4afc1438
REFCNT = 1
FLAGS = (PADMY,POK,pPOK,UTF8)
PV = 0x7f8a4bbf09d0 "\303\272ser"\0 [UTF8 "\x{fa}ser"]
CUR = 5
LEN = 16
Notice that the UTF8 flag is on.
But the dump of $r->user is:
SV = PV(0x7f8a42ba67c0) at 0x7f8a4afc17b0
REFCNT = 1
FLAGS = (PADTMP,POK,pPOK)
PV = 0x7f8a4bbfbb60 "\303\272ser"\0
CUR = 5
LEN = 16
Notice that the UTF8 flag is off on the value returned by r->user.
I'm guessing this is normal behavior due to the fact that $r->user calls
the Apache C API directly?
I'm wondering how others have dealt with situations like this. Is there
any way to get a scalar out of $r->user with the UTF8 flag turned on iff
it was set with a value that had the UTF8 flag turned on? I know the
following works:
$user = Encode::decode('UTF-8', $r->user)
But I really would have expected $r->user to return a value with the
UTF8 flag already on since the value that I used to set it did in fact
have the flag turned on.
FWIW, this is mod_perl 2.0.8, Apache 2.2.29
Regards,
Michael Schout