Использование: в имени переменной в perl

Я действительно новичок в Perl и у меня есть проблема, когда я загружаю в XML с использованием XML::Simple, и у меня есть имена тегов в качестве имен хешей. Я хочу получить хеш с именем "xsd:schema", но очевидно, что $xsd:schema не работает. Я целую вечность гуглял это и не мог найти, как это сделать.

Как мне получить этот хеш, чтобы я мог узнать ключевые значения?

Редактировать:

Извините, я не очень хорошо себя объяснил. Я хочу узнать ключи и значения этих ключей в хэше на несколько уровней, но имя xsd: схема вызывает синтаксическую ошибку:

foreach my $attributes (keys %{ $data{$xsd:schema}{$xsd:element}}){
    print "$attributes : ${$data}{$xsd:schema}{$xsd:element}{$attributes}\n";
}

Редактировать 2: Вот как я это сделал.

$schemaData = $data->{'xsd:schema'}->{'xsd:element'}->{'xsd:complexType'}->{'xsd:sequence'}->{'xsd:element'}->{'xsd:complexType'}->{'xsd:sequence'}->{'xsd:element'};

print Dumper($schemaData);

foreach my $fieldName (keys %{ $schemaData}){

    $fieldType =  $schemaData->{$fieldName}->{'type'};
    print "$fieldType\n";
}

1 ответ

Решение

Используйте Data::Dumper для визуализации сложных структур данных.

XML:: Simple не создает новые переменные, он создает ссылку. Смотрите Perl Data Structures Cookbook.

use Data::Dumper;
use XML::Simple;

my $x = XMLin(q(<r xmlns:xsd="xsd"><xsd:schema atr="a">a</xsd:schema></r>));
print Dumper $x;
print $x->{'xsd:schema'}{content};

Выход:

$VAR1 = {
          'xsd:schema' => {
                          'content' => 'a',
                          'atr' => 'a'
                        },
          'xmlns:xsd' => 'xsd'
        };
a
Другие вопросы по тегам