混淆Perl数组行为

混淆Perl数组行为,perl,Perl,我正在使用Infoblox设备的PerlAPI(文档:) 我有以下代码: ... my $specificRecord = $recordResults[0]; say $specificRecord->name(); foreach ($specificRecord->ipv4addrs()) { say $_; } $specificRecord包含Infoblox::DNS::主机记录对象 当我在ipv4addrs()上迭代时,问题就出现了。根据文档和perl调

我正在使用Infoblox设备的PerlAPI(文档:)

我有以下代码:

...

my $specificRecord = $recordResults[0];

say $specificRecord->name();

foreach ($specificRecord->ipv4addrs())
{
    say $_;
}
$specificRecord包含Infoblox::DNS::主机记录对象

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

在我的例子中,如果调试我的程序和“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'
db70
分贝c
结果:1
aaaa9999test.justice
main:(testScript2.pl:70):foreach($specificRecord->ipv4addrs())
main:(testScript2.pl:71):{
DB x$specificRecord->ipv4addrs();
0阵列(0x64e9e3c)
0  '8.8.8.8'
1  '8.8.4.4'
分贝
main:(testScript2.pl:72):比如说$;
DB x$;
0阵列(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'
   ...
DB x$specific记录;
0 Infoblox::DNS::Host=HASH(0x8b3eacc)
“\uuuu object\u id\uuuuu'=>”dns.host$。\u default.justice.aaaaaa999test”
“别名”=>数组(0x8b3e9fc)
空数组
'为\u dns配置\u'=>'真'
'禁用'=>'错误'
“ipv4addrs”=>数组(0x64e9e3c)
0  '8.8.8.8'
1  '8.8.4.4'
“ipv6addrs”=>阵列(0x8aa1bac)
空数组
'name'=>'aaaa9999test.justice'
...

我不知道我做错了什么,也不知道为什么foreach不能使用$变量。我尝试将ipv4addrs()分配给数组,然后再进行foreach,但没有效果。

它返回数组引用。尝试取消引用它:

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

我爱你,这是我能想象到的最不色情、最有男子气概的方式。我花了一个半小时在这件蠢事上。我喜欢Perl,但讨厌。非常感谢你的帮助。@gparent如果它为你解引用数组引用,这会更让人困惑。哦,我确定,只是在其他编程语言中,这类问题似乎更为明显。也许我错了,我对Perl毫无经验,我喜欢了解更多,但到目前为止,这是我的观点。当我说“愚蠢”时,我并不想暗示语言是错误的,但我花了很多时间在一些愚蠢的事情上:)