我有以下类/包:
package Data::CrawlerThreadPool;
use Moose;
use MooseX::InsideOut;
use MooseX::NonMoose;
extends 'Thread::Pool::Simple';
around BUILDARGS => sub {
my $orig = shift;
my $class = shift;
return $class->$orig( do => [\&_do_handle],
min => 5,
max => 10 );
};
sub _do_handle {
$| = 1;
print "In Do handle";
}
1;
在我的主脚本中,我这样调用它(例如...):
#!/usr/bin/env perl
use strict;
use warnings;
use Data::CrawlerThreadPool;
my $tp = Data::CrawlerThreadPool->new();
my @args = qw(0 0 0 0 0 0 0 0 0);
$tp->add(@args) for (0..10);
$tp->join();
似乎调用了 BUILDARGS 方法,但从未调用过处理句柄。 我在这里错过了什么? Thread::Pool::Simple
谢谢,
最佳答案
\&_do_handle
没有调用 _do_handle sub - 它只是解除对 sub 的引用。这个习语通常在 eval {}
中使用,以检查您是否真的有一个 subref(或一个带有 subref 重载的对象)——我认为这不是您打算做的在这里。
如果您打算实际调用 _do_handle,则直接调用它:
around BUILDARGS => sub {
my $orig = shift;
my $class = shift;
return $class->$orig( do => [ _do_handle() ],
min => 5,
max => 10 );
};
关于perl - 驼鹿和扩展非驼鹿类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11992132/