forkmanager を使用して、順次ではなく同時にタスクを実行しています。実際のコードを、コードのロジックを表す次のサンプル コードに変更しました。
#!/usr/bin/perl -w
use strict;
use Data::Dumper;
use Parallel::ForkManager;
my @array2d = () ;
my $dim1Items = 4;
my $dim2Items = 3;
my $dim1Manager = Parallel::ForkManager->new($dim1Items);
for (my $i = 0; $i <= $dim1Items ; $i++) {
$dim1Manager->start and next;
my $dim2Manager = Parallel::ForkManager->new($dim2Items);
for (my $j = 0; $j <= $dim2Items; $j++) {
$dim2Manager->start and next;
$array2d[$i][$j] = "$i\t$j" ;
$dim2Manager->finish;
}
$dim2Manager->wait_all_children;
$dim1Manager->finish;
}
$dim1Manager->wait_all_children;
print Dumper(@array2D) ;
次に、Dumper(@2dArray) を実行して内容を確認しましたが、配列が空であることを意味する null 文字列が返されました。フォークせずに値の割り当て構文を試してみましたが、うまくいきました。つまり、フォークで何か間違ったことをしているに違いありません。