如何从 Perl 数据结构中获取数据

How to get data from Perl data structure

我已经将 JSON 解析为以下数据结构:

$VAR1 = {
          '041012020' => {
                            'item_number' => 'P2345'
                          },
          '041012021' => {
                            'item_number' => 'I0965'
                          },
          '041012022' => {
                            'item_number' => 'R2204'
                          }
        };

我正在尝试使用以下代码获取 item_numbers 的值,它为我提供了 HASH 值作为输出,而不是实际的 item_number 值。请指导我获得预期值。

foreach my $value (values %{$json_obj}) {
       say "Value is: $value,";
 }

输出:

Value is: HASH(0x557ce4e2f3c0),
Value is: HASH(0x557ce4e4de18),
Value is: HASH(0x557ce4e4dcf8),

如果我使用相同的代码获取密钥,它就可以正常工作

foreach my $key (keys %{$json_obj}) {
        say "Key is: $key,";
 }

输出:

Key is: 041012020,
Key is: 041012020,
Key is: 041012022,

散列元素的值是对散列 ({ item_number => 'P2345' }) 的引用。这就是将引用字符串化时得到的结果。如果你想要项目编号,你需要告诉 Perl。

for my $value (values %$data) {
   say $value->{item_number};
}

for my $item_number ( map { $_->{item_number} } values %$data ) {
   say $item_number;
}

这是您问题的短代码。


    #!usr/bin/perl
    
    $VAR1 = {
              '041012020' => {
                                'item_number' => 'P2345'
                              },
              '041012021' => {
                                'item_number' => 'I0965'
                              },
              '041012022' => {
                                'item_number' => 'R2204'
                              }
            };
            
    print "$VAR1->{$_}->{item_number}\n" for keys %$VAR1;

在块中使用:

for my $key (keys %$VAR1) {
    print "$VAR1->{$key}->{item_number}\n"
}