2012-01-26 29 views
4

我正在研究一些使用BigIP :: iControl模塊來查詢F5負載均衡器的代碼。在Perl中遍歷保佑對象

現在,我在從特定函數返回的變量上對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

Object :: Iterate是一個模塊,允許您使用'map'和'grep'與一個對象。 –

回答

4

我不知道那些成員變量是公共的 - 我不熟悉使用的模塊 - 所以這很可能違反LocalLB::PoolMember::MemberMonitorStatus類的封裝。使用前應檢查。

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

這將是更好檢查MemberMonitorStatus類是否提供一個存取,以及可能用於構件監視器狀態陣列的迭代器。

上面的測試僅僅是通過將您的Dumper輸出粘貼到Perl腳本中進行測試的,代碼是基於目測數據結構實現的for循環代碼。

(編輯:基於谷歌緩存F5 webcentral文檔,這可能是因爲MemberMonitorStatus是在底層代碼的簡單結構,在Perl的暴露與兩個成員變量的一類 - 但沒有如果是這樣,上述可能是好的。)