如何从PERL转储中追溯原始数据结构信息?

如何从PERL转储中追溯原始数据结构信息?,perl,Perl,我正在分析几个.xlsx工作表,以创建一个新的工作表,其中包含有条件的数据用法。我浏览了下面的数据结构,不知道它是散列数组还是散列数组。 我使用dump命令转储了以下数据结构 打印转储程序$hash_reg_list{first_type}{registers} [ { 'fields' => [ { 'field_

我正在分析几个.xlsx工作表,以创建一个新的工作表,其中包含有条件的数据用法。我浏览了下面的数据结构,不知道它是散列数组还是散列数组。 我使用dump命令转储了以下数据结构

打印转储程序$hash_reg_list{first_type}{registers}

            [
          {
            'fields' => [
                          {
                            'field_name' => ' IP_NAME_AACTV_SFE'
                          },
                          {
                            'field_name' => ' IP_NAME_AACTV_PP'
                          },

                        ],
            'register_name' => ' IP_NAME_AACTV'
          },
          {
            'fields' => [
                          {
                            'field_name' => ' IP_NAME_CONFIG_LO_KHD_L2DEMOTE'
                          }
                        ],
            'register_name' => ' IP_NAME_CONFIG'
          },
          {
            'fields' => [
                          {
                            'field_name' => ' IP_NAME_JIK_FE_MIN_TST'
                          },
                                                    {
                            'field_name' => ' IP_NAME_JIK_TM_LOOPA_HYU'
                          }
                        ],
            'register_name' => ' IP_NAME_JIK'
          },

]
我想打印上述数据结构中的所有寄存器名称

my @sorted_mm_register_list_1;
foreach my $register_name (sort keys %hash_reg_list{first_type}{registers})
    {
       $sorted_mm_register_list_1[$list_index] = $register_name;
       $list_index++;
       print "$hash_reg_list{first_type}{registers}{register_name}";
       printf("listindex: %s\n", $list_index);

    }

如何追溯从PERL转储的以下数据结构?如果有任何帮助,我们将不胜感激

$hash_reg_list{first_type}{registers}
是对数组的引用。您希望迭代引用数组的元素

for my $register (@{ $hash_reg_list{first_type}{registers} }) {
   ...
}

->@*
需要Perl 5.24或Perl 5.20,并且
使用实验性qw(postderef);


$register
是数组当前元素的值,它是对散列的引用。您希望使用键
register\u name
打印该散列的元素

say $register->{register_name};

我们一起得到

for my $register (@{ $hash_reg_list{first_type}{registers} }) {
   say $register->{register_name};
}


如果我们想按寄存器名称对寄存器进行排序,我们将使用以下命令:

for my $register (
   sort { $a->{register_name} cmp $b->{register_name} }
      @{ $hash_reg_list{first_type}{registers} }
) {
   say $register->{register_name};
}



有关取消引用的信息以及更多信息的链接,请参阅。

语言Perl的名称,而不是Perl。这不是首字母缩略词,抱歉太天真了。在PERL 5.8.1中,当我在代码中放入他的语句“say$register->{register_name}”时,我得到编译错误“cannotcallmethod”say“on unblessed reference at\script…”。我可以用打印语句代替say吗?始终使用
使用strict;使用警告,如果合适,使用
使用功能qw(比如)或等效代码。我不想费心把它放到每个代码片段中,因为它会把所有的东西都弄得乱七八糟,特别是因为解决方案在文档中已经很明显了。再说一遍,名称是“Perl”,而不是“Perl”。(你为什么使用20年前的版本?)耶,我用下面的代码使它工作$局部变量=$register->{register\u name};打印“$local_变量”;它应该是
打印“$local\u variable\n”
,但
表示$local\u变量更短更干净。
for my $register ($hash_reg_list{first_type}{registers}->@*) {
   say $register->{register_name};
}
for my $register (
   sort { $a->{register_name} cmp $b->{register_name} }
      @{ $hash_reg_list{first_type}{registers} }
) {
   say $register->{register_name};
}
for my $register (
   sort { $a->{register_name} cmp $b->{register_name} }
      $hash_reg_list{first_type}{registers}->@*
) {
   say $register->{register_name};
}