迭代Perl中的祝福对象

时间:2012-01-26 00:15:06

标签: perl variables iteration

我正在研究一些使用BigIP :: iControl模块查询F5负载均衡器的代码。

现在,当我从特定函数返回的变量上执行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 个答案:

答案 0 :(得分:4)

我不确定这些成员变量是否公开 - 我不熟悉所使用的模块 - 所以这可能会违反LocalLB::PoolMember::MemberMonitorStatus类的封装。你应该在使用前检查。

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

最好检查MemberMonitorStatus类是否提供访问者,并且可能是成员监视器状态数组的迭代器。

上面的测试只是将您的Dumper输出粘贴到Perl脚本中,并根据眼球数据结构实现for循环的代码。

(编辑: 基于Google缓存中的F5 webcentral文档,可能是MemberMonitorStatus是底层代码中的一个简单结构,在Perl作为一个有两个成员变量的类 - 但没有行为。如果是这样,上面的内容可能没问题。)