【发布时间】:2016-02-02 05:33:31
【问题描述】:
我有一段 perl 脚本:
my $thread_count = 20
my %QUEUES;
my $current_queue=0;
while(defined($INPUT[$cnt]))
{
while (my @instance = $q1->fetchrow_array)
{
my $walk = "string";
push @{$QUEUES{$current_queue}},$walk;
$current_queue=($current_queue+1)%$thread_count;
}
while (my @instance = $q2->fetchrow_array) {
my $walk = "string";
push @{$QUEUES{$current_queue}},$walk;
$current_queue=($current_queue+1)%$thread_count;
}
}
我试图将命令推送到一个数组中,我决定将其保存在一个散列中,因为我认为我可以让我的生活变得轻松而不是 if(!defined($QUEUES[$current_queue]))$QUEUES[$current_queue]=[];
我使用了Data::Dumper 和一个常规的 for 循环,发现没有为 $QUEUE 中的任何键定义任何内容,从 0 到 $thread_count-1。这不是教科书自动复活的用法吗?我做错了什么?
【问题讨论】:
-
该代码不会运行。您为什么不创建一个minimal reproducible example 来显示您遇到的相同问题?
-
我也不确定您认为
($current_queue+1)%$thread_count应该发生什么... -
@MattJacob:
$current_queue=($current_queue+1)%$thread_count;以$thread_count为模递增一个$current_queue。那里肯定没有什么奇怪的,不是吗?也就是说,我无法重现所描述的问题,因此我投票决定将这个问题搁置,直到提供一个展示不良行为的实际示例。 -
(另外,我不确定为什么 OP 将
%QUEUES定义为哈希,然后用 0 到 19 的整数对其进行索引。当然数组会更好?但在至少这不应该以任何方式影响自动激活行为。) -
如果您使用线程,请务必查看the DBI docs on threads。否则我怀疑您的查询没有返回任何内容,因此循环永远不会运行。在 while 循环中放置一个打印或增加一个计数器以找出答案。
标签: arrays perl autovivification