package DBI_Wrapper; sub new { my $class = shift; my $self = bless { dbh => [], active => 0, }, $class; } sub add_dbhs { my $self = shift; push @{$self->{dbh}}, @_; } sub AUTOLOAD { my $meth = our $AUTOLOAD; (my $func = $meth) =~ s/.*:://; my $self = shift; my $start = $self->{active}; my $dbh; while (1) { $dbh = $self->{dbh}->[$self->{active}]; eval { $dbh->ping }; last unless $@; $self->{active}++; $self->{active} %= @{$self->{dbh}}; die "No valid DBH found\n" if $self->{active} == $start; } return $dbh->$meth( @_ ); }