There are many, many ways to accomplish what you wish. But you also have to ask yourself if it really worth your time to write a script for this task when you should have reliable configuration tools. Having said that, here is a small script that demonstrates using DBI's HandleError hook. The code will stop after take the first successful connection, which may not be quite what you want:
use strict;
use warnings;
use DBI;
use Data::Dumper;
sub dbi_error { warn "failed with @_\n" }
my @attempts = (
[qw( wrong wrong )], # this would be a wrong user/pass
[qw( correct pass )], # this would be a correct user/pass
[qw( wrong wrong )], # and another wrong one
);
my $dbh;
for (@attempts) {
$dbh ||= DBI->connect(
qw(DBI:mysql:information_schema:localhost), @$_,
{ HandleError => sub { dbi_error( @$_ ) } },
);
}
print Dumper $dbh->selectall_arrayref('select * from TABLES', {Slice=>
+{}});
But as you can see, DBI does indeed allow you to control what happens when an error occurs. You do not necessarily need to wrap the call in a try-catch block. Hope this helps!
jeffa
L-LL-L--L-LL-L--L-LL-L--
-R--R-RR-R--R-RR-R--R-RR
B--B--B--B--B--B--B--B--
H---H---H---H---H---H---
(the triplet paradiddle with high-hat)