The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use 5.010;
use strict;
use warnings;

use Test::RedisDB;
use RedisDB;
use Scalar::Util qw(blessed);

=head1 NAME

no_raise_error_1.pl

=head1 DESCRIPTION

This example shows how object with raise_error disabled returns error as
blessed reference when connection to server has failed.

=cut

my @servers;
my @queues;
for ( 1 .. 3 ) {
    my $srv = Test::RedisDB->new;
    push @servers, $srv;
    my $redis = RedisDB->new(
        host        => "127.0.0.1",
        port        => $srv->{port},
        raise_error => undef,
    );
    push @queues, $redis;
}

while (1) {
    my $n = 0;
    foreach my $redis (@queues) {
        my $len;
        $len = $redis->incr("error_test");
        if ( blessed $len) {
            say "Got an error: $len";
            $servers[$n]->start if rand > 0.7;
        }
        else {
            say "Server $n: $len";

            # randomly stop server
            $servers[$n]->stop if rand > 0.8;
        }
        $n++;
    }
    sleep(1);
}