2012-11-08 134 views
4

我與Infoblox設備的Perl的API工作(DOC:https://ipam.illinois.edu/api/doc/混淆Perl數組行爲

我有以下代碼:

... 

my $specificRecord = $recordResults[0]; 

say $specificRecord->name(); 

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

$ specificRecord包含Infoblox的DNS ::: :主機記錄對象。

我在迭代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' 

這裏的「相關部分X」的Infoblox的DNS ::主持人::對象:

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()分配給一個數組,然後對此進行傳遞,但無濟於事。

回答

8

它返回一個數組引用。嘗試解引用它:

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

我愛你在最無色情和男子氣概的方式可以想象。花了一個半小時在這個愚蠢的。我喜歡Perl,但是當然。非常感謝你的幫助。 – gparent

+0

另外我會接受定時器時,upvoted已經:) – gparent

+0

@gparent它會更混亂,如果它解除引用你的數組ref。 –