您好在调试器中打印出以下变量$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'
我想循环浏览并访问每个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",
},
]
答案 0 :(得分:3)
看起来你有一个包含哈希引用作为元素的数组引用。
我可以告诉它这是一个数组引用,因为它是$x
,其中$
为sigil,表示引用,并且因为0 ARRAY(0xdb09e20)
。
所以,如果你print Dumper
使用Data::Dumper它,你会得到这样的结果:
[
{
'OBJECT_ID' => 111026746749824,
'TABLE_KEY' => '0-85296-384-X',
'TABLE_KEY_NAME' => 'VALUE',
},
{
'OBJECT_ID' => 1000000000108155,
'TABLE_KEY' => '1598-8740',
'TABLE_KEY_NAME' => 'VALUE',
}
]
如果你在这个演示文稿中看一下,你需要做的事情变得非常明显。
首先,迭代数组引用中的元素,您必须取消引用它们。我在这里使用了一个非常详细的解除引用,因为如果你不确切地知道你在做什么,我觉得它更清晰。您也可以@$x
。
foreach my $elem ( @{ $x } ) {
# ...
}
现在你有$elem
,其中包含一个哈希引用。要获取OBJECT_ID
密钥,您需要访问它。因为它是一个引用,所以你需要解引用运算符->
。
say $elem->{OBJECT_ID};
这将为一个元素打印出OBJECT_ID
。 say
与print
类似,带有换行符。您可以使用use feature 'say'
加载它。
它像这样结合在一起:
use strict;
use warnings;
use feature 'say';
my $x = ...;
foreach my $elem ( @{ $x } ) {
say $elem->{OBJECT_ID};
}
它将打印:
111026746749824
1000000000108155
要详细了解Perl中的引用,请查看perlref和perlreftut。您还可以在Perlmaven上查看这些教程:
答案 1 :(得分:0)
这将按照您的要求进行
my @ids = map { $_->{OBJECT_ID} } @$x;
say for @ids;
111026746749824
111026746749824
1000000000108155
1000000000108155
1000000000108156
1000000000108156
1000000000108157
1000000000108157