试图理解为什么以下不起作用:
DB<1> $record = "some value"
DB<2> $record->{default} = $record;
DB<3> use Data::Dumper
Run Code Online (Sandbox Code Playgroud)
会认为Dumper应该显示与步骤10相同的结果:
DB<4> print Dumper $record
$VAR1 = 'some value';
DB<5> $temp = $record
DB<6> $record->{default} = $temp
Run Code Online (Sandbox Code Playgroud)
至少在这种情况下,会认为Dumper会在第10步显示结果:
DB<7> print Dumper $record
$VAR1 = 'some value';
Run Code Online (Sandbox Code Playgroud)
你真的需要强行吗?
DB<8> undef $record
DB<9> $record->{default} = $temp
DB<10> print Dumper $record
$VAR1 = {
'default' => 'some value'
};
Run Code Online (Sandbox Code Playgroud)
我怎么能理解/解释为什么Perl没有"得到"我的意思?
在需要时创建散列或数组的过程称为自动生成.只有未定义的值才能自动生成.
请注意,没有严格 refs,以下工作:
my $record = 'some value';
$record->{default} = 'other value';
print $record, $record->{default};
Run Code Online (Sandbox Code Playgroud)
因为Perl会为您自动生成一个名为"some value"的变量,因为您可以验证:
print ${'some value'}{default};
Run Code Online (Sandbox Code Playgroud)
这就是你需要的原因use strict; use warnings;.
因为如果是这样 - 你做了什么,产生一个错误,告诉你问题:
Can't use string ("some value") as a HASH ref while "strict refs"
Run Code Online (Sandbox Code Playgroud)
你特别想做的是:
"some value" -> {default} = "some value";
Run Code Online (Sandbox Code Playgroud)
这是没有意义的,因为你试图取消引用一个字符串值.