Perl & MongoDB binary data
It looks like another sad story about _utf8_
flag...
I may be wrong, but it seems that headers_as_string
and content
methods of HTTP::Message return their strings as a sequence of characters. But MongoDB driver expects the strings explicitly passed to it as 'binaries' to be a sequence of octets - hence the warning drama.
A rather ugly fix is to take down the utf8
flag on $rawhead and $rawbody in your code (I wonder shouldn't it be really done by MongoDB driver itself?), by something like this...
_utf8_off $rawhead; _utf8_off $rawbody; # ugh
The alternative is to use encode('utf8', $rawhead)
- but then you should use decode
when extracting values from DB, and I doubt it's not uglier.
Your data is characters, not octets. Your assumption seems to be that you are just passing things through as octets, but you must have violated that assumption earlier somehow by decoding incoming text data, perhaps even without you noticing.
So simply do not decode, data stay octets, storing into the db won't fail.