-3

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]=[];

通常の for ループを使用Data::Dumperしたところ、0 から $thread_count-1 までの $QUEUE のどのキーにも何も定義されていないことがわかりました。これは教科書的な自動蘇生の使い方ではないでしょうか?私は何を間違っていますか?

4

1 に答える 1

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

と同等です

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

そのステートメントが$QUEUES{$current_queue}存在しないときに実行された場合、$QUEUES{$current_queue}作成され、1 つの要素 (のコピー$walk) を持つ配列への参照が割り当てられます。

したがって、%QUEUESが空の場合、pushステートメントは実行されませんでした。

于 2016-02-02T12:34:53.583 に答える