in reply to Encode::FB_CROAK eating up strings?

Encode::FB_CROAK | Encode::LEAVE_SRC is the incantation you want.
I tried to look in the docs for Encode but to no avail
Yes, it's easy to miss, but it's documented: 'If the "Encode::LEAVE_SRC" bit is not set but CHECK is set, then the source string to encode() or decode() will be overwritten in place. If you're not interested in this, then bitwise-OR it with the bitmask.'