Changes for version 0.031 - 2026-06-09

  • Fix infinite retry loop in _write_burst() on hard syswrite errors such as EBADF; the pipe is now marked invalid and throws.
  • Only consult $! when syswrite actually fails, avoiding misreads of stale errno after a successful write.
  • Treat EWOULDBLOCK like EAGAIN on platforms where they differ.
  • close() and reader() now flush output buffered by non-blocking writes instead of silently dropping it and croaking in DESTROY.
  • DESTROY now localizes $., $@, $!, $^E and $? so a destructor flush cannot clobber the caller's error state.
  • A truncated message header at EOF now throws instead of reading as a clean EOF.
  • Fix eof() mixed-mode buffer check that inspected the wrong slot (lines vs burst).
  • from_fh() and from_fd() now accept the same %params as the other constructors, as the docs already claimed.
  • mixed_data_mode => 1 is now honored as a constructor param by all constructors, not just pair().
  • fits_in_burst() followed by write_burst() no longer compresses the payload twice.
  • SSIZE_MAX fallback raised from 512 to 32767 (_POSIX_SSIZE_MAX).
  • Remove dead code (unused debug() helper, do_extra_loop bookkeeping).
  • Documentation fixes: correct 16-byte chunk header description, max_size() fallback behavior, byte-string payload note, typos.

Documentation

Modules

Send atomic messages from multiple writers across a POSIX pipe.