2016-06-21 4 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. Примеры в основном касаются ARRAYS OF HASHES. Но вышеупомянутый массив ...? Я даже не знаю, что это за массив. Может ли кто-нибудь указать мне в правильном направлении?

Так, например, как я получить доступ к "object_status"->"availability_status" из "member"->"address"

Thx simbabque. Это выход я получаю от 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

Действительно, структуры данных, которые имеют «благословение» 'прикрепленные к ним при сбрасывании с помощью 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'; 

Надеется, что это помогает, и теперь вы должны быть в состоянии пройти через эту структуру данных с петлями.

Смежные вопросы