在 Perl 中迭代 bless 对象

Jim*_*Jim 5 iteration variables perl

我正在编写一些代码来使用 BigIP::iControl 模块查询 F5 负载均衡器。

现在,当我对从特定函数返回的变量执行转储器时,我得到以下输出。

我在迭代这个对象时遇到了很多麻烦。

我怎样才能迭代这个并只取出每个成员的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[]' )
        ];
Run Code Online (Sandbox Code Playgroud)

mar*_*ton 5

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

for my $mms ( @{$VAR1->[0]} ) {
    warn $mms->{monitor_status};
}
Run Code Online (Sandbox Code Playgroud)

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

上面的测试只需将 Dumper 输出粘贴到 Perl 脚本中,并使用基于观察数据结构实现的 for 循环代码即可。

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