sub new ($@) { my $proto = shift; my $self = {@_}; bless($self, (ref($proto) || $proto)); my $comm = $self->{'comm'} = RPC::PlClient::Comm->new($self); my $app = $self->{'application'} or $self->Fatal("Missing application name"); my $version = $self->{'version'} or $self->Fatal("Missing version number"); my $user = $self->{'user'} || ''; my $password = $self->{'password'} || ''; my $socket; if (!($socket = $self->{'socket'})) { $self->Fatal("Missing peer address") unless $self->{'peeraddr'}; $self->Fatal("Missing peer port") unless ($self->{'peerport'} || index($self->{'peeraddr'}, ':') != -1); $socket = $self->{'socket'} = IO::Socket::INET->new ('PeerAddr' => $self->{'peeraddr'}, 'PeerPort' => $self->{'peerport'}, 'Proto' => $self->{'socket_proto'}, 'Type' => $self->{'socket_type'}, 'Timeout' => $self->{'timeout'}); $self->Fatal("Cannot connect: $!") unless $socket; } $self->Debug("Connected to %s, port %s", $socket->peerhost(), $socket->peerport()); $self->Debug("Sending login message: %s, %s, %s, %s", $app, $version, $user, "x" x length($password)); $comm->Write($socket, [$app, $version, $user, $password]); $self->Debug("Waiting for server's response ..."); my $reply = $comm->Read($socket); die "Unexpected EOF from server" unless defined($reply); # <------- Here is where your error is die "Expected server to return an array ref" unless ref($reply) eq 'ARRAY'; my $msg = defined($reply->[1]) ? $reply->[1] : ''; die "Refused by server: $msg" unless $reply->[0]; $self->Debug("Logged in, server replies: $msg"); return ($self, $msg) if wantarray; $self; }