The implicit use of global $_ in the client code seems a bit odd. This variable is not set explicitly from the command line without careful invocation:
in reply to socket help
echo myarg | perl -nle 'print "ARG=<$_>\n"'
You're better off, at least, fetching from ARGV:
...or however you want to parse the command line arguments in @ARGV.
my ($hostname) = @ARGV;
die "usage: $0 hostname" unless $hostname;
my $socket = new IO::Socket::INET (
PeerAddr => $hostname,
PeerPort => '7071',
Proto => 'tcp',