use strict;
Ваш друг. Он сказал бы вам:
Global symbol "%data" requires explicit package name
То, что вы хотите, это %$data
Другими словами: $data
и %data
считаются двумя разными переменными.
Обновление:
Поскольку вы изменили весь вопрос, мой ответ теперь не имеет большого смысла .. Как и ваш вопрос. Вы распечатали это. Что еще тебе нужно?
Если вы хотите напечатать эту структуру, вам нужно что-то вроде (не проверено):
for my $key1 (keys %$data) {
for my $array_value (@{ $data->{$key1} }) {
for my $key2 (keys %$array_value) {
print "$key2 => $array_value->{$key2}\n";
}
}
}
Если вы хотите получить прямой доступ к значению:
print $data->{font}[0]{'fname'}
Вам нужно будет поэкспериментировать, чтобы получить то, что вам нужно. В выводе Data :: Dumper вы можете легко увидеть, какие значения являются хешами, а какие - массивами:
$VAR1 = { # The curly bracket denotes a beginning hash
'font' => [ # Square bracket = array begins
{ # The first array element is a hash
'fname' => 'Courier', # Inside the hash
'role' => 'console',
'size' => '9'
}, # Hash ends
{ # Next array value, new hash begins
'fname' => 'Times New Roman',
'role' => 'default',
'size' => '14'
},
{
'fname' => 'Helvetica',
'role' => 'titles',
'size' => '10'
}
] # Array ends
}; # Hash ends