Как получить доступ к ключам Tie :: IxHash?

#perl

#perl

Вопрос:

Приветствую, мне нужно сгенерировать XML-документ из вложенного хэша perl, сохраняя порядок хэш-ключей. Я пытаюсь https://metacpan.org/pod/Tie::IxHash для части, касающейся хранения ключей в порядке. Однако я не могу понять, как получить доступ к хэш-ключам, которые создает Tie ::IxHash, они не ведут себя как хэш-ключ, хэш-ключ или объект. В примере кода я создаю Tie::IxHash и пытаюсь распечатать передатчик ключа Вот пример кода:

 use strict;
use warnings;

use diagnostics;
use Scalar::Util;
use Data::Dumper;
use XML::Writer;
use Tie::IxHash;
use DateTime::Format::XSD;

my $time = time;


my $dt = DateTime->now;
my $timestamp = DateTime::Format::XSD->format_datetime($dt);
my $transmissionId = sprintf("%u",int(rand(100000000000000000000))). "E";


#sample data structure as hsah ref
# my $transmissionHeader = {
#       TransmissionId => "$transmissionId",
#       Timestamp => "$timestamp",
#       Transmitter => {
#           ETIN => '1232456789',
#               SOME => '5555555555',
#       }
#   };
    

my $transmissionHeader  = Tie::IxHash->new(
        TransmissionId => "$transmissionId",
        Timestamp => "$timestamp",
        Transmitter => Tie::IxHash->new( #each nested hash a new object?
            ETIN => '1232456789',
            SOME => '5555555555',
                                                                ),
    );
        
print Dumper $transmissionHeader;

# tried all these no joy
print "$transmissionHeader{Transmitter} n";
print "$transmissionHeader->{Transmitter} n";
print "$transmissionHeader->Transmitter() n";
 

Ответ №1:

Вы можете использовать Indices() метод для получения индекса ключа, а затем использовать Values() метод для получения значения этого ключа:

 my $idx = $transmissionHeader->Indices('Transmitter');
my $hash = $transmissionHeader->Values($idx);
print Dumper $hash;
 

Комментарии:

1. Спасибо, это помогает, хотя я надеялся на что-то, что не было двухэтапным процессом.