Changes for version 0.4.6 - 2026-08-25

  • Added opt-in -lvalue support for generated H2O accessors. Accessors created with -lvalue may now be assigned to directly:
    • $obj->foo = 42; $obj->count++; $obj->name .= q{ Jr.};
    • Existing setter syntax remains supported:
      • $obj->foo(42);
  • Added -lvalue support throughout Util::H2O::More helpers, including h2o, baptise, d2o, Getopt2h2o, o2h2o, ini2h2o, yaml2h2o, and HTTPTiny2h2o.
  • d2o -lvalue propagates lvalue accessors through nested HASH structures and through HASH elements contained in ARRAY refs.
  • ARRAY container virtual methods remain normal methods rather than lvalue accessors. New HASH elements added with push/unshift inherit the container's lvalue objectification mode.
  • Custom -meth methods and AUTOLOAD handlers remain normal, non-lvalue methods.
  • Explicitly reject the incompatible combination of -ro and -lvalue.
  • Preserved normal non-lvalue behavior and existing setter semantics when -lvalue is not requested.
  • Documented lvalue assignment semantics and important edge cases, including missing declared keys, autoundef behavior, references/ aliases, nested structures, and replacement HASH refs.
  • Added extensive tests covering new lvalue behavior, compatibility with existing features, option combinations, expected exceptions, nested data, constructors, Getopt helpers, config/YAML/HTTP helpers, and edge cases.

Documentation

Modules

Convenience utilities built on Util::H2O (baptise, d2o, INI/YAML/HTTP helpers, Getopt helpers)