Perl - 未定义变量 - 为什么?

uri*_*rie -1 perl hashmap

为什么下面给出了以下输出?$a1 定义...

package A1;
use Hash::Merge;
use Data::Dumper;
  
sub new 
{
    my $class = shift;
    my $self =
    {
        length => 2,
    };
    return bless $self, $class;
}

1;


my $a1 = A1->new();
print("a1 = " . ref($a1) . "\n");

my %a = {'1' => $a1};

my $a3 = \%a;
print( Dumper($a3));
Run Code Online (Sandbox Code Playgroud)

输出:

a1 = A1
$VAR1 = {
          'HASH(0x247c568)' => undef
        };

Run Code Online (Sandbox Code Playgroud)

我原以为该值是“A1(0x...)”,而不仅仅是未定义的...

cho*_*oba 7

花括号引入了一个散列引用,但它%a是一个散列,而不是一个引用。因此,引用被字符串化并用作键,而没有什么可用作值,因此它保持未定义。

尝试

my %a = (1 => $a1);
Run Code Online (Sandbox Code Playgroud)

反而。

您也可以直接创建引用,而无需%a

my $a3 = {'1' => $a1};
Run Code Online (Sandbox Code Playgroud)

你应该总是use warnings;。Perl 会告诉你的

参考发现平均大小的列表预期在...