この perl プログラムの実行:
use strict;
use warnings;
use threads;
my $foo = Foo->new();
my $t = threads->create( sub { print "in thread\n" } );
$t->join();
package Foo;
sub new
{
print "Foo->new\n";
return bless {}, 'Foo';
}
sub DESTROY
{
print "Foo->DESTROY\n";
}
1;
次の出力が生成されます。
Foo->new
in thread
Foo->DESTROY
Foo->DESTROY
これは、perl が新しいスレッドで $foo のコピーを作成し、新しいスレッドが終了するときとメイン スレッドが終了するときにデストラクタを呼び出すために発生していると思います。これは私には悪い振る舞いのように思えます。私のはるかに複雑な実際のプログラムでは、頭痛の種です。perl がこれを行わないようにする方法はありますか?