2017-01-10 1 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는 모습입니다 :

나는과 같이 가져 그때 해시 맵의 형태로 MISC 태그로 저장할

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

하지만,이 내 "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} 

수단 (hashref 될 요소를 기대하는) 소정의 역 참조 arrayref 각 요소를 가지고 그 요소의 키에 액세스 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를 내 id_array에서 내 메인 코드로 전달하기 때문에 꽤 쉽습니다. –

관련 문제