Multithreaded service in Perl

#!/usr/bin/perl
=pod

Multithreaded Hello World server

Author: Alexander D'Archangel (darksuji) <darksuji(at)gmail(dot)com>

=cut

use strict;
use warnings;
use 5.10.0;
use threads;

use ZeroMQ qw/:all/;
use ZeroMQ::Raw qw/zmq_device/;

sub worker_routine {
my ($context) = @_;

# Socket to talk to dispatcher
my $receiver = $context->socket(ZMQ_REP);
$receiver->connect('inproc://workers');

while (1) {
my $string = $receiver->recv()->data;
say "Received request: [$string]");
# Do some 'work'
sleep (1);
# Send reply back to client
$receiver->send('World');
}
}

# Prepare our context and sockets
my $context = ZeroMQ::Context->new();

# Socket to talk to clients
my $clients = $context->socket(ZMQ_ROUTER);
$clients->bind('tcp://*:5555');

# Socket to talk to workers
my $workers = $context->socket(ZMQ_DEALER);
$workers->bind('inproc://workers');

# Launch pool of worker threads
for (1 .. 5) {
threads->create('worker_routine', $context);
}
# Connect work threads to client threads via a queue
# Having to send raw sockets here is an infelicity in ZeroMQ 0.09
zmq_device (ZMQ_QUEUE, $clients->socket, $workers->socket);

# We never get here but clean up anyhow