我正在研究一些使用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[]' )
];
答案 0 :(得分:4)
我不确定这些成员变量是否公开 - 我不熟悉所使用的模块 - 所以这可能会违反LocalLB::PoolMember::MemberMonitorStatus
类的封装。你应该在使用前检查。
for my $mms ( @{$VAR1->[0]} ) {
warn $mms->{monitor_status};
}
最好检查MemberMonitorStatus类是否提供访问者,并且可能是成员监视器状态数组的迭代器。
上面的测试只是将您的Dumper输出粘贴到Perl脚本中,并根据眼球数据结构实现for循环的代码。
(编辑: 基于Google缓存中的F5 webcentral文档,可能是MemberMonitorStatus是底层代码中的一个简单结构,在Perl作为一个有两个成员变量的类 - 但没有行为。如果是这样,上面的内容可能没问题。)