2016-06-21 10 views
1

内のオブジェクトにアクセスし、ハンドリング私はこれがどのように動作するかを把握することができませんでしhttp://search.cpan.org/~ltp/BigIP-iControl/lib/BigIP/iControl.pm#get_pool_member_object_status_($pool)たPerl:配列

$VAR1 = [ 
     [ 
     bless([ 
       bless({ 
          'member' => bless({ 
              'address' => '192.168.100.141', 
              'port' => '80' 
              }, 'Common::IPPortDefinition'), 
          'object_status' => bless({ 
                'availability_status' => 'AVAILABILITY_STATUS_GREEN', 
                'status_description' => 'Pool member is available', 
                'enabled_status' => 'ENABLED_STATUS_ENABLED' 
                }, 'LocalLB::ObjectStatus') 
         }, 'LocalLB::PoolMember::MemberObjectStatus'), 
       bless({ 
          'member' => bless({ 
              'address' => '192.168.100.142', 
              'port' => '80' 
              }, 'Common::IPPortDefinition'), 
          'object_status' => bless({ 
                'availability_status' => 'AVAILABILITY_STATUS_GREEN', 
                'status_description' => 'Pool member is available', 
                'enabled_status' => 'ENABLED_STATUS_ENABLED' 
                }, 'LocalLB::ObjectStatus') 
         }, 'LocalLB::PoolMember::MemberObjectStatus'), 
       bless({ 
          'member' => bless({ 
              'address' => '192.168.100.143', 
              'port' => '80' 
              }, 'Common::IPPortDefinition'), 
          'object_status' => bless({ 
                'availability_status' => 'AVAILABILITY_STATUS_GREEN', 
                'status_description' => 'Pool member is available', 
                'enabled_status' => 'ENABLED_STATUS_ENABLED' 
                }, 'LocalLB::ObjectStatus') 
         }, 'LocalLB::PoolMember::MemberObjectStatus'), 
       bless({ 
          'member' => bless({ 
              'address' => '192.168.100.144', 
              'port' => '80' 
              }, 'Common::IPPortDefinition'), 
          'object_status' => bless({ 
                'availability_status' => 'AVAILABILITY_STATUS_GREEN', 
                'status_description' => 'Pool member is available', 
                'enabled_status' => 'ENABLED_STATUS_ENABLED' 
                }, 'LocalLB::ObjectStatus') 
         }, 'LocalLB::PoolMember::MemberObjectStatus') 
       ], 'LocalLB::PoolMember::MemberObjectStatus[]') 
     ] 
    ]; 

からget_pool_member_object_status_($pool)

によって生成された以下の配列を処理してみてください。私はperldscからいくつかの例を試しました。そこにある例は、ハッシュの配列に大部分は関係しています。しかし、上記の配列は...?私はこれがどんな種類の配列であるか分からない。誰かが私を正しい方向に向けることができますか?

だから、たとえばどのように私は "member"->"address"

のTHX simbabqueの"object_status"->"availability_status"アクセスできます。これは、私はあなたがアクセスしようとしているData::Printer:

[ 
[0] [ 
    [0] LocalLB::PoolMember::MemberObjectStatus[] { 
     public methods (0) 
     private methods (0) 
     internals: [ 
      [0] LocalLB::PoolMember::MemberObjectStatus, 
      [1] LocalLB::PoolMember::MemberObjectStatus, 
      [2] LocalLB::PoolMember::MemberObjectStatus, 
      [3] LocalLB::PoolMember::MemberObjectStatus 
     ] 
    } 
] 

]

+0

'LocalLB :: PoolMember :: MemberObjectStatus'タイプのオブジェクトの配列を含む 'LocalLB :: PoolMember :: MemberObjectStatus []'のオブジェクトの配列のようです。 – SparkeyG

+1

実際には、 'bless 'Data :: Dumperでダンプしたときにそれらにアタッチされたオブジェクトはオブジェクトです。それらのメソッドの種類がわからない場合は、[Data :: Printer](http://p3rl.org/Data::Printer)を使用してください。それは、継承、値、およびそれが行うことができるメソッドを含む、オブジェクトに関するすべてを教えてくれます。あなたは、その深さのレベルでそれらを表示するためにオプションを手にする必要があるかもしれませんが、それは簡単です。 – simbabque

+1

私はこれらのクラスがどこから来たのかを理解しようとしましたが、[BigIP :: iControlのソース](https://metacpan.org/source/LTP/BigIP-iControl-0.098/lib/BigIP/iControl.pm#L518 )。 **注意、おそらくこれはNSFWです!** – simbabque

答えて

1

から得る出力され'availability_status''address'
私はこの全体のオブジェクトを横断していなかったが、このコードで、私は印刷することができています必須フィールド。

#!/usr/bin/perl -w 
use strict; 
use warnings; 
use Data::Dumper; 


my $obj = [ 
     [ 
     bless([ 
       bless({ 
          'member' => bless({ 
              'address' => '192.168.100.141', 
              'port' => '80' 
              }, 'Common::IPPortDefinition'), 
          'object_status' => bless({ 
                'availability_status' => 'AVAILABILITY_STATUS_GREEN', 
                'status_description' => 'Pool member is available', 
                'enabled_status' => 'ENABLED_STATUS_ENABLED' 
                }, 'LocalLB::ObjectStatus') 
         }, 'LocalLB::PoolMember::MemberObjectStatus'), 
       bless({ 
          'member' => bless({ 
              'address' => '192.168.100.142', 
              'port' => '80' 
              }, 'Common::IPPortDefinition'), 
          'object_status' => bless({ 
                'availability_status' => 'AVAILABILITY_STATUS_GREEN', 
                'status_description' => 'Pool member is available', 
                'enabled_status' => 'ENABLED_STATUS_ENABLED' 
                }, 'LocalLB::ObjectStatus') 
         }, 'LocalLB::PoolMember::MemberObjectStatus'), 
       bless({ 
          'member' => bless({ 
              'address' => '192.168.100.143', 
              'port' => '80' 
              }, 'Common::IPPortDefinition'), 
          'object_status' => bless({ 
                'availability_status' => 'AVAILABILITY_STATUS_GREEN', 
                'status_description' => 'Pool member is available', 
                'enabled_status' => 'ENABLED_STATUS_ENABLED' 
                }, 'LocalLB::ObjectStatus') 
         }, 'LocalLB::PoolMember::MemberObjectStatus'), 
       bless({ 
          'member' => bless({ 
              'address' => '192.168.100.144', 
              'port' => '80' 
              }, 'Common::IPPortDefinition'), 
          'object_status' => bless({ 
                'availability_status' => 'AVAILABILITY_STATUS_GREEN', 
                'status_description' => 'Pool member is available', 
                'enabled_status' => 'ENABLED_STATUS_ENABLED' 
                }, 'LocalLB::ObjectStatus') 
         }, 'LocalLB::PoolMember::MemberObjectStatus') 
       ], 'LocalLB::PoolMember::MemberObjectStatus[]') 
     ] 
    ]; 

print Dumper($obj->[0]->[0]->[0]->{member}->{address}); 
print Dumper($obj->[0]->[0]->[0]->{object_status}->{availability_status}); 
print Dumper($obj->[0]->[0]->[1]->{member}->{address}); 
print Dumper($obj->[0]->[0]->[1]->{object_status}->{availability_status}); 
print Dumper($obj->[0]->[0]->[2]->{member}->{address}); 
print Dumper($obj->[0]->[0]->[2]->{object_status}->{availability_status}); 
print Dumper($obj->[0]->[0]->[3]->{member}->{address}); 
print Dumper($obj->[0]->[0]->[3]->{object_status}->{availability_status}); 

出力:

$VAR1 = '192.168.100.141'; 
$VAR1 = 'AVAILABILITY_STATUS_GREEN'; 
$VAR1 = '192.168.100.142'; 
$VAR1 = 'AVAILABILITY_STATUS_GREEN'; 
$VAR1 = '192.168.100.143'; 
$VAR1 = 'AVAILABILITY_STATUS_GREEN'; 
$VAR1 = '192.168.100.144'; 
$VAR1 = 'AVAILABILITY_STATUS_GREEN'; 

は、このことができますし、今あなたがループして、このデータ構造をトラバースすることができるはずです願っています。