package XYZ { use Moo; has [qw/_products overall electronics safety/] => ( is => 'lazy' ); sub _build__products { return [ ['MG-20',1,2,3], ['JU-54',2,3,1], ['HY-21',3,1,2], ['OK-34',4,10,5], ['GT-75',9,6,'n/a'], ['KJ-23',6,8,7], ['PO-65',7,5,10], ['HN-34',8,6,9], ['ED-23',9,7,4], ['FR-98',10,4,8], ]; } sub _build_overall { return [ map { join(':', @{ $_ }[1,0]) } @{ $_[0]->_products } ]; } sub _build_electronics { return [ map { join(':', @{ $_ }[2,0]) } @{ $_[0]->_products } ]; } sub _build_safety { return [ map { join(':', @{ $_ }[3,0]) } @{ $_[0]->_products } ]; } }; use strict; use warnings; use feature 'say'; use XYZ; my $obj = XYZ->new; say 'OVERALL'; say for @{ $obj->overall }; say 'ELECTRONICS'; say for @{ $obj->electronics }; say 'SAFETY'; say for @{ $obj->safety }; __END__