运行这个 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 不这样做?