use Data::Dumper; my $job = {}; for my $field (qw( lri pm gp )) { $job->{ $field } = { %$gen_data{ $field } }; warn "Processing " . Dumper $job; sleep 10; }; warn "Enqueuing " . Dumper $job; $q->enqueue( $job ); $q->enqueue( undef ); # tell the thread that we're done and it should quit ... # In the thread while (my $job = $q->dequeue) { };