while(1) { my $conn = $self->{daemon}->accept; # blocks return undef unless $conn; my $thread = new Thread \&handle_request, $conn; # Thread away, next please! } sub handle_request { my $conn = shift; my $req = $conn->get_request; # The rest of your code here }