Perl Threads :: Queue

时间:2012-02-10 17:27:44

标签: multithreading perl

我正在创建一个Thread :: Queue元素数组。 我这样做是这样的:

for (my $i=0; $i < $queues_amount; $i++){
    $queues[i]=Thread::Queue->new;
}

然而,当我用每个像

这样的元素填充每个队列时
$queues[$index]->enqueue($element);

我收到以下错误:

无法在未定义的值上调用方法“enqueue”...

你能帮我找出问题所在吗?

我的perl版本是5.12.2。

1 个答案:

答案 0 :(得分:8)

您没有在循环中$变量上使用$i sigil:

for (my $i=0; $i < $queues_amount; $i++){
    $queues[i]=Thread::Queue->new;  # should be $i
}

如果您启用use strict,则subs部分会抛出有关裸字i的错误。要捕获许多错误,请将use warnings; use strict;放在所有程序的顶部。

将它写成:

也更为惯用
my @queues = map {Thread::Queue->new} 0 .. $queues_amount - 1;