gpt4 book ai didi

perl - 为什么 `exists` 修改我的常量?

转载 作者:行者123 更新时间:2023-12-04 09:16:27 25 4
gpt4 key购买 nike

exists 功能可以unexpectedly autovivify entries在哈希中。

令我惊讶的是,这种行为也适用于常量:

use strict;
use warnings;
use Data::Dump 'dump';

use constant data => {
'foo' => {
'bar' => 'baz',
},
'a' => {
'b' => 'c',
}
};

dump data; # Pre-modified

print "No data for 'soda->cola->pop'\n" unless exists data->{soda}{cola}{pop};

dump data; # data->{soda}{cola} now sprung to life

输出

{ a => { b => "c" }, foo => { bar => "baz" } }
No data for 'soda->cola->pop'
{ a => { b => "c" }, foo => { bar => "baz" }, soda => { cola => {} } }


我怀疑这是一个错误。这是特定于 5.10.1 的东西,还是其他版本的 Perl 行为类似?

最佳答案

这是记录在案的行为。 perldoc constant说:

Even though a reference may be declared as a constant, the reference may point to data which may be changed, as this code shows.

use constant ARRAY => [ 1,2,3,4 ];
print ARRAY->[1];
ARRAY->[1] = " be changed";
print ARRAY->[1];


它是常量的引用,而不是它所指的对象。

关于perl - 为什么 `exists` 修改我的常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3976571/

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