2017-03-16 4 views
1

からハッシュに配列のサイズを見つけるために、どのように、私は、JSONのこの例があります。Perlは、だから、JSON

{ 
     "tab" : { 
      "sort" : "true", 
      "sort_by" : "0", 
      "name" : "blablabla", 
      "cols" : [ 
       "time_ep", 
       "count_warning", 
       "count_critical" 
      ] 
     } 
    } 

を、私はPerlのハッシュにそれをデコードした後、私は「colsの」アレイとの問題を抱えて。 print Dumper ${$params->{$tab}}{cols}は、私は、この配列のサイズを見つけることができないという

$VAR1 = [ 
      'time_ep', 
      'count_warning', 
      'count_critical' 
     ]; 

のように見えます。私がいることをやろうとしているとき - それは1またはARRAY(adress)を返しますが、私はそのような配列の1つの要素を取得しようとすると、: - :

$VAR1 = 'count_warning'; 

私は、引用文献にさまざまなオプションを試してみました はprint Dumper ${$params->{$tab}}{cols}[1]は私が必要とするものを手に入れますしかし、何も私に必要なものを与えてくれませんでした。 提案がありますか?

+0

http://perlmonks.org/?node=References+quick+reference – ysth

答えて

4

colsのサイズを取得するには、次の

print scalar @{$params->{tab}->{cols}}; 

あなたは、このキーから配列の参照を取得する配列を取得し、それを逆参照してからスカラコンテキストでそれを使用している - 配列のサイズを返します。 。

#!/usr/bin/env perl 
use strict; 
use warnings; 
use JSON; 
use Data::Dumper; 

my $params = from_json(
    '{ 
     "tab" : { 
      "sort" : "true", 
      "sort_by" : "0", 
      "name" : "blablabla", 
      "cols" : [ 
       "time_ep", 
       "count_warning", 
       "count_critical" 
      ] 
     } 
    }' 
); 

print Dumper $params; 
print scalar @{ $params->{tab}->{cols} } 

注 - scalarが明示的にスカラーコンテキストを強制していますが、「スカラ演算」のような連結または数値比較をすれば、それは暗黙のうちに起こります。 (printはスカラーコンテキストを強制しません)

+0

私は閉鎖しました!ありがとう、男! – genesi5

関連する問題