package Moo::Role::DBIConnection { use Moo::Role; use DBI; has 'dbh' => ( is => 'ro', required => 1, coerce => sub { my $args = shift; return $args if ref($args) eq 'DBI::db'; ref($args) eq 'HASH' or die 'Not a DB handle nor a hashref'; return DBI->connect( @{$args}{qw/dsn user password options/} ); }, ); };