意外数据:: Dumper :: Dumper结果

sid*_*com 5 perl

为什么Data :: Dumper :: Dumper打印$VAR1->{'AA'}[2]而不是{ 1 => 6 }

#!/usr/bin/env perl
use warnings;
use strict;
use 5.10.0;

my @a = ( 'a', 'b', { 1 => 6 } );
my %h = (
    'AA' => [ @a ],
    'BB' => [ @a ],
);


say $h{BB}->[2]{1};

use Data::Dumper;
say Dumper \%h;
Run Code Online (Sandbox Code Playgroud)

输出:

6
$VAR1 = {
        'AA' => [
                    'a',
                    'b',
                    {
                    '1' => 6
                    }
                ],
        'BB' => [
                    'a',
                    'b',
                    $VAR1->{'AA'}[2]
                ]
        };
Run Code Online (Sandbox Code Playgroud)

Ckl*_*kln 7

在您的示例中$VAR1->{'AA'}[2],$VAR1->{'BB'}[2]是对相同哈希的引用.

Data::Dumper不想多次打印变量.此行为更忠实地表示数据结构,并且它避免了可能遇到的任何无限循环.例如:

my $loop;
$loop = { 1 => \$loop };
print Dumper $loop;
Run Code Online (Sandbox Code Playgroud)

输出是

$VAR1 = {
     '1' => \$VAR1
};
Run Code Online (Sandbox Code Playgroud)