Итерация по благословляющим объектам в Perl - PullRequest
4 голосов
/ 26 января 2012

Я работаю над кодом для запроса балансировщиков нагрузки F5 с помощью модуля BigIP :: iControl.

Прямо сейчас я получаю следующий вывод при выполнении Dumper для переменной, которую я получаю от определенной функции.

У меня много проблем с итерированием этого объекта.

Как я мог бы повторить это и вынуть только monitor_status для каждого участника?

$VAR1 = [
          bless( [
                   bless( {
                            'monitor_status' => 'MONITOR_STATUS_UP',
                            'member' => bless( {
                                               'address' => '127.0.0.0.1',
                                               'port' => '8085'
                                             }, 'Common::IPPortDefinition' )
                          }, 'LocalLB::PoolMember::MemberMonitorStatus' ),
                   bless( {
                            'monitor_status' => 'MONITOR_STATUS_UP',
                            'member' => bless( {
                                               'address' => '127.0.0.0.1',
                                               'port' => '8085'
                                             }, 'Common::IPPortDefinition' )
                          }, 'LocalLB::PoolMember::MemberMonitorStatus' ),
                   bless( {
                            'monitor_status' => 'MONITOR_STATUS_DOWN',
                            'member' => bless( {
                                               'address' => '127.0.0.0.1',
                                               'port' => '8085'
                                             }, 'Common::IPPortDefinition' )
                          }, 'LocalLB::PoolMember::MemberMonitorStatus' ),
                   bless( {
                            'monitor_status' => 'MONITOR_STATUS_DOWN',
                            'member' => bless( {
                                               'address' => '127.0.0.0.1',
                                               'port' => '8085'
                                             }, 'Common::IPPortDefinition' )
                          }, 'LocalLB::PoolMember::MemberMonitorStatus' )
                 ], 'LocalLB::PoolMember::MemberMonitorStatus[]' )
        ];

1 Ответ

4 голосов
/ 26 января 2012

Я не уверен, являются ли эти переменные-члены открытыми - я не знаком с используемыми модулями - поэтому это может нарушить инкапсуляцию класса LocalLB::PoolMember::MemberMonitorStatus. Вы должны проверить перед использованием.

for my $mms ( @{$VAR1->[0]} ) {
    warn $mms->{monitor_status};
}

Было бы лучше проверить, предоставляет ли класс MemberMonitorStatus метод доступа и, возможно, итератор для массива состояния монитора элемента.

Вышесказанное было проверено просто путем вставки вывода Dumper в скрипт Perl с кодом цикла for, реализованным на основе визуального анализа структуры данных.

(редактирование: на основе веб-документов F5 в кэше Google. Возможно, MemberMonitorStatus представляет собой простую структуру в базовом коде, представленную в Perl как класс с двумя переменными-членами, но без поведения. Если это так, то, вероятно, все в порядке.)

...