note
bojinlund
<p>This shows two other alternatives of parallel processing (not explicitly using fork).
Save this as MyChameleon.pm:
</p>
<code>
package MyChameleon;
use strict;
use warnings;
use threads;
$| = 1; # autoflush STDOUT
my $used_as_script = not caller();
if ($used_as_script) {
print "Start script\n";
my $thread_to_do = threads->create( \&to_do, 'thread', 5 );
my $thread_sys = threads->create(
sub {
system $^X, "-MMyChameleon", "-e", "MyChameleon::to_do('system')";
}
);
to_do( 'script', 3 );
$thread_to_do->join;
$thread_sys->join;
exit;
}
sub to_do {
my ( $tag, $times ) = @_;
$times //= 10;
print "$tag: Hello World!\n";
map { print "$tag ($_)\n"; sleep 1 } ( 1 .. $times );
print "$tag: is done\n";
}
!!1;
</code>
<p>
Run it like this: “perl MyChameleon.pm”.
</p>
<p>See also [id://396759]</p>
1023667
1023667