in reply to Push to array as part of Struct

Just a suggestion rather than rolling your own you could use Moose and traits (specifically Moose::Meta::Attribute::Native::Trait::Array) to provide an interface to your fancier, non-scalar members in your instances.

The cake is a lie.
The cake is a lie.
The cake is a lie.