Changes for version 0.10 - 2026-05-03

  • BREAKING: the global read/write hook system is gone. Removed register_read_hook, register_write_hook, clear_hooks, has_hooks, register_line_callback, list_line_callbacks and the whole include/file_hooks*.h C API (file_register_hook_c, file_run_hooks, FileHookContext, etc.). Downstream modules that registered hooks must port to the new plugin API.
  • Replacement: a named-plugin system. Callers opt in per call via a trailing key/value tail: File::Raw::slurp($p, plugin => 'csv', sep => ';');
  • register_plugin / unregister_plugin / list_plugins (Perl) and file_register_plugin / file_unregister_plugin / file_lookup_plugin plus dispatch helpers in include/file_plugin.h (C). Plugins implement any subset of read / write / record / stream phases.
  • Predicate registry survives, repackaged as a built-in 'predicate' plugin. New names: register_predicate / list_predicates. The legacy 2-arg sugar grep_lines($p, 'is_blank') keeps working.
  • `plugin =>` accepts an arrayref of plugin names in addition to a scalar string. READ unwraps left to right; WRITE applies right to left:
  • Change to use ExtUtils::Depends to help linking header.

Modules

File operations using direct system calls