Architectural goals
Six months (and several iterations later)
a design I liked.
In the end
packing-lists are structured objects
They can be read/written.
This validates and normalizes the structure.
Each object is a packing-element (base class) & further properties.
Differences are implemented as methods
Perl bonus: classes are "open"
you can add a visitor later, as an after-thought
All operations in the ports tree that manipulate packing-lists
use this abstraction.