2011-11-11 6 views
2

配列の値の参照を解除する方法を見つけようとしていますが、行き詰まってしまったので、私は問題を調べようとしましたが、助けが必要です。Perl:配列の参照を解除する

私は、ハッシュは、次のコードによって生成されるデータは、配列内に存在する、Infobloxのデータベースからいくつかのデータをつかみ、ホストエントリのMACアドレスを見つけるために、結果内を検索しようとしています:

use strict; 
use Data::Dumper; 
my @results = $session->get(
    object => "Infoblox::DNS::Host", 
    name => "test.com.au", 
    ipv4addrs => ".*.", 
    view => "external" 
); 
データを使用して、次の出力を印刷し

foreach (@results) { 
    my @search = $_->ipv4addrs;   
     foreach (@search) { 
      print Dumper($_) . "\n"; 
    } 
} 

:私は、次のコードを使用して出力をループ「$ _-> ipv4addrs」を使用して、データ構造の高レベルでド参照しています

: :ダンパー:

$VAR1 = [ 
     bless({ 
       'network' => '111.111.111.0/25', 
       'options' => [], 
       'dynamic' => 'false', 
       '__version' => '4.2r5-5-68691', 
       'VIEW_FUNCTION' => { 
            'remove' => '.com.infoblox.perl_api.Infoblox.DHCP.remove_fixed_address', 
            'search' => '.com.infoblox.perl_api.Infoblox.DHCP.search_fixed_address', 
            'add' => '.com.infoblox.perl_api.Infoblox.DHCP.insert_fixed_address', 
            'add_using_template' => '.com.infoblox.perl_api.Infoblox.DHCP.insert_fixed_address_using_template', 
            'get' => '.com.infoblox.perl_api.Infoblox.DHCP.get_fixed_address', 
            'modify' => '.com.infoblox.perl_api.Infoblox.DHCP.modify_fixed_address' 
            }, 
       'ipv4addr' => '111.111.111.111', 
       'match_client' => 'MAC', 
       'mac' => '00:11:00:11:00:11', 
       'disable' => 'false', 
       '__type' => '.com.infoblox.perl_api.Infoblox.DHCP.FixedAddr' 
      }, 'Infoblox::DHCP::FixedAddr') 
    ]; 

しかし、私は試してみて、使用して参照を呼び出す場合は、 '$ _->をMAC' 'foreachの(@searh')内のループ、私はエラーを取得:

"Can't call method "mac" on unblessed reference at ./connect_test.pl line nn." 

私のコーディングスキルで失敗この点、どんな情報や方向性も高く評価されます。

答えて

1

@searchに格納されている各項目は、配列参照自体です。

# If arrayref contains only one  | # If multiple objects expected 
# Infoblox::DHCP::FixedAddr object | # inside @search 
            | 
            | 
foreach (@search) {    | foreach my $item (@search) { 
            | 
    my $obj = shift @$_;   |  foreach my $obj (@$item) { 
    my $mac = $obj->mac;   | 
}         |   my $mac = $obj->mac; 
            |  } 
            | } 
+0

私の知識ベースでかなりのギャップを埋めるZaidの例をありがとう。 – user1039417

2

配列の最初の要素は、祝福された参照です。

$_->[0]->mac 

あなたが直接リストに(上記のように)、または完全に間接参照->オペレータと配列参照内の要素にアクセスすることができる:@list = @{$array_reference}

+0

どうもありがとうございました。 – user1039417

関連する問題