The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Morris::Plugin::WithDB;
use Moose::Role;
use namespace::clean -except => qw(meta);

has dbname => (
    is => 'ro',
    isa => 'Str',
    required => 1,
);

has _setup_done => (
    is => 'rw',
    isa => 'Bool',
    default => 0,
);

sub get_dbh {
    my $self = shift;
    my $dbh = $self->connection->get_dbh( $self->dbname );
    if (! $self->_setup_done ) {
        $self->setup_dbh( $dbh );
        $self->_setup_done(1);
    }
    return $dbh;
}

sub setup_dbh { }

1;