2016-06-21 33 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'; 

希望这有助于现在你应该可以遍历这个数据结构的循环。