2016-06-21 34 views
1

我試圖處理這是由get_pool_member_object_status_($pool)的Perl:訪問和使用數組

產生從http://search.cpan.org/~ltp/BigIP-iControl/lib/BigIP/iControl.pm#get_pool_member_object_status_($pool)

$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[]') 
     ] 
    ]; 

以下數組我無法弄清楚這應該是如何工作的處理對象。我嘗試了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'; 

希望這有助於現在你應該可以遍歷這個數據結構的循環。