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
语句从未执行过。
我有这段 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
语句从未执行过。