The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl
use strict;
use warnings;
use Gearman::XS qw(:constants);
use Gearman::XS::Worker;

use Storable qw/thaw/;

# a simple "add arguments" worker

sub do_add {
    my $job     = shift;
    my $numbers = thaw( $job->workload );
    warn "Got numbers to add: @$numbers\n";
    my $sum = 0;
    $sum += $_ for @$numbers;
    warn "Added @$numbers = $sum\n";
    return $sum;
}

my $worker = Gearman::XS::Worker->new;
my $ret = $worker->add_server( '127.0.0.1', 4730 );
die "Error: " . $worker->error() unless $ret == GEARMAN_SUCCESS;

$ret = $worker->add_function( 'add', 1, \&do_add, 1 );
die "Error: " . $worker->error() unless $ret == GEARMAN_SUCCESS;

my $count = 500;
print "Serving up to $count connections..\n";
while ( $count > 0 ) {
    my $ret = $worker->work;
    die "Error: " . $worker->error() unless $ret == GEARMAN_SUCCESS;
    print "Worked..\n";
    $count--;
}
print "Bye!\n";