Perl Threads :: Queue

Ale*_* B. 1 perl multithreading

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

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

然而,虽然我正在用这样的元素填充每个队列

$queues[$index]->enqueue($element);
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

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

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

我的perl版本是5.12.2.

Eri*_*rom 8

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

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

如果你有use strict,该subs部分会抛出关于裸字的错误i.要捕获许多错误,请将其use warnings; use strict;放在所有程序的顶部.

将它写成以下内容也更为惯用:

my @queues = map {Thread::Queue->new} 0 .. $queues_amount - 1;
Run Code Online (Sandbox Code Playgroud)