您好,在调试器中我打印出以下变量$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)
看起来您有一个包含哈希引用作为元素的数组引用。
我可以看出它是一个数组引用,因为它$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 中引用的更多信息,请查看perlref和perlreftut。您还可以在 Perlmaven 上查看这些教程:
归档时间: |
|
查看次数: |
1963 次 |
最近记录: |