#! perl -slw use strict; use threads; use threads::shared; use Thread::Queue; my $sem : shared; sub worker { my $Q = shift; while( my $line = $Q->dequeue ) { $line =~ s[a][A]g; lock $sem; print $line; } } our $T //= 4; my $n = $T -1; my @Qs = map Thread::Queue->new, 0 .. $n; my @threads = map{ threads->create( \&worker, $Qs[ $_ ] ) } 0 .. $n; my $i = 0; while( <> ) { $Qs[ $i ]->enqueue( $_ ); $i = ( $i + 1 ) % $T; } $Qs[ $_ ]->enqueue( undef ) for 0 .. $n; $_->join for @threads; __END__ junk71 3.5GB >nul