令人困惑的Perl数组行为

gpa*_*ent 4 perl

我正在使用Infoblox设备的Perl API(doc:https://ipam.illinois.edu/api/doc/)

我有以下代码:

...

my $specificRecord = $recordResults[0];

say $specificRecord->name();

foreach ($specificRecord->ipv4addrs())
{
    say $_;
}
Run Code Online (Sandbox Code Playgroud)

$ specificRecord包含一个Infoblox :: DNS :: Host记录对象.

当我在ipv4addrs()上进行迭代时,我的问题出现了.根据文档和perl调试器,ipv4addrs()返回包含IP或DHCP :: FixedAddr对象的ARRAY.

在我的情况下,如果我调试我的程序和"x"$ specificRecord-> ipv4addrs()以及$ _,我得到相同的结果:

DB<1> b 70

DB<2> c
Results: 1
aaaa9999test.justice
main::(testScript2.pl:70):          foreach ($specificRecord->ipv4addrs())
main::(testScript2.pl:71):          {

DB<2> x $specificRecord->ipv4addrs();
0  ARRAY(0x64e9e3c)
   0  '8.8.8.8'
   1  '8.8.4.4'

DB<3> n
main::(testScript2.pl:72):              say $_;

DB<3> x $_;
0  ARRAY(0x64e9e3c)
   0  '8.8.8.8'
   1  '8.8.4.4'
Run Code Online (Sandbox Code Playgroud)

以下是Infoblox :: DNS :: Host对象的"x"的相关部分:

DB<2> x $specificRecord;
0  Infoblox::DNS::Host=HASH(0x8b3eacc)
   '__object_id__' => 'dns.host$._default.justice.aaaa9999test'
   'aliases' => ARRAY(0x8b3e9fc)
        empty array
   'configure_for_dns' => 'true'
   'disable' => 'false'
   'ipv4addrs' => ARRAY(0x64e9e3c)
      0  '8.8.8.8'
      1  '8.8.4.4'
   'ipv6addrs' => ARRAY(0x8aa1bac)
        empty array
   'name' => 'aaaa9999test.justice'
   ...
Run Code Online (Sandbox Code Playgroud)

我不知道我做错了什么以及为什么foreach不能使用$ _变量.我尝试将ipv4addrs()分配给一个数组,然后对其进行预告,但无济于事.

Tim*_*Tim 8

它返回一个数组引用.尝试解除引用它:

foreach ( @{ $specificRecord->ipv4addrs() } )
Run Code Online (Sandbox Code Playgroud)

  • 我以最无心的和男子气概的方式爱你.花了一个半小时就愚蠢了.我喜欢Perl,但是.非常感谢你的帮助. (5认同)