gpt4 book ai didi

perl - 插入警告后如何抑制散列?

转载 作者:行者123 更新时间:2023-12-04 22:31:24 25 4
gpt4 key购买 nike

Use of each() on hash after insertion without resetting hash iterator results in undefined behavior, Perl interpreter: 0x13932010 at /srv/data203806/MUXmh-Migration/Newperl/localperl/lib/site_perl/5.18.1/x86_64-linux-thread-multi/forks.pm line 1736.



我的代码中的所有内容都运行良好,但出现此错误。我怎样才能抑制这个警告?

最佳答案

这警告:

use strict;
use warnings;
use Data::Dumper;

my %h = (a=>1);
while (my ($k,$v) = each %h) {
$h{b} = 2;
}

print Dumper \%h;

这使警告静音:
use strict;
use warnings;
use Data::Dumper;

my %h = (a=>1);
{
no warnings qw(internal);
while (my ($k,$v) = each %h) {
$h{b} = 2;
}
}

print Dumper \%h;

请注意,静音的警告类别称为 internal 。我怎么知道这个?我对 Perl 的警告类别有某种惊人的内存吗?不。所有 Perl 的错误和警告消息都在 perldiag 中有详细记录;对于每个警告,它都会提到它所属的类别。

也就是说,这个警告告诉你一个真正的问题。您的代码行为未定义;如果您切换到不同版本的 Perl,它可能会突然开始表现不同。比关闭警告更好的是修复您的代码!

在我上面的例子中,一个快速的解决方法是使用 each 来循环遍历 %h 的副本而不是 %h 本身。
use strict;
use warnings;
use Data::Dumper;

my %h = (a=>1);
{
my %tmp = %h;
while (my ($k,$v) = each %tmp) {
$h{b} = 2;
}
}

print Dumper \%h;

关于perl - 插入警告后如何抑制散列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22710267/

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