Perl 循环遍历哈希数组

yan*_*kel 4 syntax perl loops

您好,在调试器中我打印出以下变量$x

DB<8> x $x

0  ARRAY(0xdb09e20)

0  HASH(0xe18d450)

  'OBJECT_ID' => 111026746749824

  'TABLE_KEY' => '0-85296-384-X'

  'TABLE_KEY_NAME' => 'VALUE'

1  HASH(0xe18d4e0)

  'OBJECT_ID' => 1000000000108155

  'TABLE_KEY' => '1598-8740'

  'TABLE_KEY_NAME' => 'VALUE'

2  HASH(0xe18d530)

  'OBJECT_ID' => 1000000000108156

  'TABLE_KEY' => '89-7085-418-5'

  'TABLE_KEY_NAME' => 'VALUE'
Run Code Online (Sandbox Code Playgroud)

我想循环遍历并访问每个OBJECT ID

我不知道该使用什么语法。

这是一个转储$x

[
  {
    OBJECT_ID      => 111026746749824,
    TABLE_KEY      => "0-85296-384-X",
    TABLE_KEY_NAME => "VALUE",
  },
  {
    OBJECT_ID      => 111026746749824,
    TABLE_KEY      => "0537-9987",
    TABLE_KEY_NAME => "VALUE",
  },
  {
    OBJECT_ID      => 1000000000108155,
    TABLE_KEY      => "89-7085-386-3",
    TABLE_KEY_NAME => "VALUE",
  },
  {
    OBJECT_ID      => 1000000000108155,
    TABLE_KEY      => "1598-8740",
    TABLE_KEY_NAME => "VALUE",
  },
  {
    OBJECT_ID      => 1000000000108156,
    TABLE_KEY      => "89-7085-418-5",
    TABLE_KEY_NAME => "VALUE",
  },
  {
    OBJECT_ID      => 1000000000108156,
    TABLE_KEY      => "1598-8651",
    TABLE_KEY_NAME => "VALUE",
  },
  {
    OBJECT_ID      => 1000000000108157,
    TABLE_KEY      => "89-7085-442-8",
    TABLE_KEY_NAME => "VALUE",
  },
  {
    OBJECT_ID      => 1000000000108157,
    TABLE_KEY      => "1598-8597",
    TABLE_KEY_NAME => "VALUE",
  },
]
Run Code Online (Sandbox Code Playgroud)

sim*_*que 6

看起来您有一个包含哈希引用作为元素的数组引用。

我可以看出它是一个数组引用,因为它$x以 a$作为标志,表示引用,并且因为0 ARRAY(0xdb09e20).

所以如果你print Dumper使用Data::Dumper it,你会得到这样的结果:

[
    {
        'OBJECT_ID'      => 111026746749824,
        'TABLE_KEY'      => '0-85296-384-X',
        'TABLE_KEY_NAME' => 'VALUE',
    },
    {
        'OBJECT_ID'      => 1000000000108155,
        'TABLE_KEY'      => '1598-8740',
        'TABLE_KEY_NAME' => 'VALUE',
    }
]
Run Code Online (Sandbox Code Playgroud)

如果您在本演示文稿中查看它,您需要做什么就变得非常明显。

首先,迭代数组引用中的元素,您必须取消引用这些元素。我在这里使用了非常详细的取消引用,因为我认为如果您不确切知道自己在做什么,那么读起来会更清晰。你也可以这样做@$x

foreach my $elem ( @{ $x } ) {
    # ...
}
Run Code Online (Sandbox Code Playgroud)

现在您已经拥有$elem其中包含哈希引用之一。要获取OBJECT_ID密钥,您需要访问它。因为它是引用,所以您需要取消引用运算符->

say $elem->{OBJECT_ID};
Run Code Online (Sandbox Code Playgroud)

这将打印出OBJECT_ID一个元素。say就像print换行符一样。您可以使用 来加载它use feature 'say'

它像这样组合在一起:

use strict;
use warnings;
use feature 'say';

my $x = ...;

foreach my $elem ( @{ $x } ) {
    say $elem->{OBJECT_ID};
}
Run Code Online (Sandbox Code Playgroud)

它将打印:

111026746749824
1000000000108155
Run Code Online (Sandbox Code Playgroud)

要了解有关 Perl 中引用的更多信息,请查看perlrefperlreftut。您还可以在 Perlmaven 上查看这些教程: