gpt4 book ai didi

Perl 散列 : while-each-loop runs into endless loop

转载 作者:行者123 更新时间:2023-12-02 01:15:10 26 4
gpt4 key购买 nike

下面的 Perl 代码进入死循环。看起来 each 在子例程调用后会自行重置。为什么会这样?

#!/usr/bin/perl
use warnings;
use strict;

my %h = ( "a" => "b" );
while ( my ($x, $y) = each %h ) {
&do_something( \%h );
}

sub do_something(){
my %tmp = %{$_[0]};
}

有趣的是,这有效:

while ( my ($x, $y) = each %h ) {
&do_something( \%h );
}

sub do_something(){
}

虽然这不是:

while ( my ($x, $y) = each %h ) {
&do_something( %h );
}

sub do_something(){
}

最佳答案

通过在列表上下文中评估它来获取散列的内容使用与 each/keys/values 相同的迭代器,导致它被重置.

最小演示:

>perl -E"%h=(a=>4); while (($k) = each(%h)) { say $k; keys %h }"
a
a
a
...

>perl -E"%h=(a=>4); while (($k) = each(%h)) { say $k; %t=%h }"
a
a
a
...

由于您仅在第一个和第三个代码段中评估列表上下文中的哈希值,因此迭代器仅在这两个代码段中被重置。


PS — 为什么您使用不正确的原型(prototype) (()) 然后告诉 Perl 忽略它 (&)?

关于Perl 散列 : while-each-loop runs into endless loop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12470137/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com