У меня есть несколько вложенных структур данных, которые ссылаются на элементы друг друга. Я хотел бы иметь возможность проверять эти ссылки, поэтому я ищу что-то, что будет печатать адрес памяти вложенных структур. Вариант для 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)
Кроме того, считается ли такой подход, когда одна структура ссылается на содержимое другой, хорошей практикой программирования? Возможно, это слишком общий вопрос и сильно зависит от конкретного кода, но я хотел бы знать ваше мнение.