use strict; use warnings; use feature 'say'; use threads; use Thread::Queue; use CAM::PDF; use File::Find; my $q = Thread::Queue-> new; my @gang = map async( sub { while ( defined( my $f = $q-> dequeue )) { say threads-> tid, ' ', $f; my $pdf = CAM::PDF-> new( $f ) or die; } }), 1 .. 2; find( sub { -f and /\.pdf$/i and $q-> enqueue( $File::Find::name ) }, './1' ); $q-> end; $_-> join for @gang; __END__ 1 ./1/1/106/10627.pdf 2 ./1/1/107/10703.pdf 2 ./1/1/186/18673.pdf 1 ./1/1/209/20946.pdf 2 ./1/1/26/2656.pdf 1 ./1/1/33/3384.pdf 2 ./1/1/57/5742.pdf 1 ./1/1/58/5869.pdf 2 ./1/1/63/6395.pdf 1 ./1/1/70/7099.pdf 1 ./1/1/74/7466.pdf