2017-01-10 30 views
1

まず最初に、これはかなり一般的な問題ですが、私は周りを見回しています。"strict refs"を使用しているときにHASH refとして文字列を使用することはできません

私はJSONファイルから読んでいるデータがありますが、基本的にはIDを表す文字列のセットです。

私はそうのようにそれをインポートします。

my $idFile='IDS.json'; 
my $idJSON; 



{ 
     local $/; 
     open my $fh, '<', $idFile or die $!; 
     $idJSON = <$fh>; 
     close $fh; 
} 

my $id_array = decode_json $idJSON; 

これは$id_arrayが今のように見えるものです:

$VAR1 = [ 
      '3233', 
      '2758', 
      '2797' 
     ]; 

私は、ハッシュマップの形でMISCタグでそれらを保存しますが、この私の"Can't use string ("3233") as a HASH ref while "strict refs" in use "エラーがスローされている場所です:

my @decodedIDS = map { $_ ->{MISC}} @{$id_array};

このエラーの原因は何ですか?いつものように、どんな助けも大歓迎です。

+0

私はあなたが何をしようとしては不明だ...あなたは '@decodedIDS欲しいものを説明してくださいすることができます'を入れる? – ThisSuitIsBlackNot

+0

「ハッシュマップの形でMISCタグを付けて保存する」と言っていたのでしょうか?多分、あなたは '@decodedIDS = map {MISC => $ _} @ {$ id_array}'と言っていたでしょうか? – mob

+0

これはハッシュではありません@mob。 'my%decodedIDS = map {$ _ => 1} @ $ id_array;'はidでキーを付けたハッシュを作成します。 – ikegami

答えて

2

私はあなたが何をしようとしているのか理解できませんが、以下はその理由です。

map { $_->{MISC} } @{$id_array} 

(要素がハッシュリファレンスであることが期待される)所与の間接参照配列リファレンスから各要素を取得し、その要素のMISCキーにアクセスします。あなたの場合、要素はリテラル文字列(例えば3233)です。だから、ちょっと次のようになります。

3233->{MISC} 

したがって、あなたは、エラーの下に取得する:

"Can't use string ("3233") as a HASH ref while "strict refs" in use

+0

ああ、私の間違いを実感しました。以前このスクリプトはid: 'MISC'のJSOn入力を期待していました。しかし、今ではJSONはidを単に含んでいます。私はマップをもう使用していないので、簡単に修正できます。単にid_arrayの各IDをメインコードに渡すだけです。 –

関連する問題