我有几个引用彼此元素的嵌套数据结构。我希望能够检查这些引用,所以我正在寻找可以打印嵌套结构的内存地址的东西。一个选项Data::Dumper
会很好。
以下是我的意思的一些例子:
my @a = ( [1,2,3], [4,5,6] );
print \@a;
会给你类似的东西:
ARRAY(0x20071dc8)
当您通过调试器运行相同的代码并使用x \@a
它检查数组时,将打印以下内容:
0 ARRAY(0x20070668)
0 ARRAY(0x2006c0d8)
0 1
1 2
2 3
1 ARRAY(0x2006c1b0)
0 4
1 5
2 6
但是使用Data::Dumper
print Dumper \@a;
看起来像这样
$VAR1 = [
[
1,
2,
3
],
[
4,
5,
6
]
];
我真正想要的是Data::Dumper
输出和调试器提供的细节的混合。或许这
$VAR1 = [ ARRAY(0x20070668)
[ ARRAY(0x2006c0d8)
1,
2,
3
],
[ ARRAY(0x2006c1b0)
4,
5,
6
]
];
编辑
考虑这段代码。输出没有解释$b[1]
与中相同的参考$a[0]
use Data::Dumper;
my @a = ( [1,2,3], [4,5,6] );
my @b = ( ["a","b","c"], $a[0] );
print Dumper \@b
print $b[1], "\n";
print $a[0], "\n";
输出
$VAR1 = [
[
'a',
'b',
'c'
],
[
1,
2,
3
]
];
ARRAY(0x2002bcc0)
ARRAY(0x2002bcc0)
此外,当一个结构引用另一个结构的内容时,这种方法是否被认为是良好的编程实践?也许这是一个太笼统的问题,并且在很大程度上取决于特定的代码,但我想知道您的意见。