PerlIO::encoding#

📦 min

Open a filehandle with a transparent character-set encoding filter.

This is a PerlIO layer implementation. It registers a PerlIO layer vtable (PerlIO_encode) that perl5’s PerlIO system calls for I/O operations on handles opened with :encoding(...).

The layer works by overloading “fill” and “flush” methods of PerlIOBuf:

  • “fill” reads bytes from the layer below, calls Encode->decode() to convert to UTF-8, and presents the result to layers above.

  • “flush” takes UTF-8 data from the write buffer, calls Encode->encode() to convert to the target encoding, and writes to the layer below.

encoding.xs struct PerlIOEncode extends PerlIOBuf with: bufsv — SV buffer seen by layers above dataSV — data read from layer below (pending bytes) enc — the Encode encoding object chk — CHECK flag for encode/decode calls flags — NEEDS_LINES flag inEncodeCall — re-entrancy guard

The BOOT section:

  1. Loads Encode module if not already loaded (via load_module)

  2. Fetches Encode::STOP_AT_PARTIAL and Encode::LEAVE_SRC constants

  3. Registers the “encoding” PerlIO layer via PerlIO_define_layer

Functions#

Other Functions#

pop_result#

Pop a single SV result off the Perl stack (equivalent of SPAGAIN; POPs). Returns a p5api SV*.