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

Perl - undefind variable - why?

为什么会给出如下输出? $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));

输出:

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

我希望值是 'A1(0x...)' 而不仅仅是未定义的...

花括号引入了哈希引用,但%a是哈希,不是引用。所以把reference字符串化作为key,没有什么东西可以作为value,所以还是undefined

尝试

my %a = (1 => $a1);

相反。

你也可以直接创建引用而不用 %a:

my $a3 = {'1' => $a1};

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

Reference found where even-sized list expected at ...