package DataTable;
use Moose;
has 'tablename' => (is => 'rw', isa => 'Str', required => 1);
has 'columns' => (is => 'rw', isa => 'ArrayRef[Str]', default => sub { [] });
has 'indices' => (is => 'rw', isa => 'HashRef[Str]', default => sub { +{} });
has 'datatypes' => (is => 'rw', isa => 'ArrayRef[Str]', default => sub { [] });
has [qw/ lengths decimals signed allownull default usequote /] =>
(is => 'rw', isa => 'ArrayRef[Int]', lazy => 1, default => sub { [] });
1;
####
package DataTable;
use Moose;
has 'tablename' => (is => 'rw', isa => 'Str', required => 1);
has 'columns' => (
traits => [ 'Array'],
is => 'rw',
isa => 'ArrayRef[Str]',
default => sub { [] },
handles => {
'add_column' => 'push',
'remove_column_at_idx' => 'delete',
# ... and many more
}
);
# rest of the class snipped off for brevity ...
####
my $dt = DataTable->new;
$db->add_column( 'foo' );
$db->add_column( 'bar' );
# columns is now [ foo, bar ]
$db->remove_column_at_idx( 0 );
# columns is now [ bar ]