gpt4 book ai didi

perl - 驼鹿和扩展非驼鹿类

转载 作者:行者123 更新时间:2023-12-02 00:18:28 25 4
gpt4 key购买 nike

我有以下类/包:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com