混乱的 Perl 数组行为

4
我正在使用Infoblox设备的Perl API(文档:https://ipam.illinois.edu/api/doc/)进行工作。
我有以下代码:
...

my $specificRecord = $recordResults[0];

say $specificRecord->name();

foreach ($specificRecord->ipv4addrs())
{
    say $_;
}

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

当我在ipv4addrs()上进行迭代时,问题就出现了。根据文档和Perl调试器的说明,ipv4addrs()返回一个包含IP或DHCP::FixedAddr对象的数组。

在我的情况下,如果我调试我的程序并且将$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'

这是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'
   ...

我不知道我做错了什么,为什么foreach与$_变量不起作用。我尝试将ipv4addrs()赋值给一个数组,然后对其进行foreach循环,但没有成功。
1个回答

8

它返回一个数组引用。尝试对其进行解引用:

foreach ( @{ $specificRecord->ipv4addrs() } )

5
我以最没有性意味和男子气概的方式爱你。在这种荒谬的事上浪费了一个半小时,我喜欢 Perl,但是天哪。非常感谢你的帮助。 - gparent
@gparent 如果它为您取消引用数组引用,那将更加令人困惑。 - Brad Gilbert
我相信,只是这种问题在其他编程语言中似乎更容易被立即发现。也许我错了,我对Perl确实缺乏经验,我喜欢学习更多关于它的知识,但这是我的观点。当我说“愚蠢”时,我并不想暗示这种语言是错误的,而是我在一些愚蠢的事情上浪费了很多时间 :) - gparent

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接