Perl:自动生成不会在哈希中创建数组

Perl: autovivification doesn't create array in hash

我有这段 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。这不是教科书式的自动复活用法吗?我做错了什么?

push @{ $QUEUES{$current_queue} }, $walk;

相当于

push @{ $QUEUES{$current_queue} //= [] }, $walk;

如果在 $QUEUES{$current_queue} 不存在时执行该语句,则会创建 $QUEUES{$current_queue},并且会为其分配一个对具有一个元素的数组的引用([=14 的副本=]).

因此,如果 %QUEUES 为空,则 push 语句从未执行过。