# Connect to database
my $db_handle = DBI->connect( $url, $user, $password ) or die $DBI::errstr;
You use die when the error is something you or your code didn't do right. You use croak when it's something your caller isn't doing right. die "error: $!" indicates the error is on the line where the error occured. croak "error: $!" indicates the error is on the line where the caller called your code.
In this case, the error (connection error to DB) has nothing to do with the caller and everything to do with the line making the connection, so I would use