2014-10-17 14 views
2

저는 perl에 익숙하지 않아 웹 페이지를 유지 관리하는 임무를 부여 받았습니다. 수정 방법을 모르는 버그를 발견했습니다.참조에 대한 키의 인수 유형은 unblessed 여야합니다.

perl 스크립트가 다음 코드에서 중지됩니다.

my @failedTests = (sort(keys ($TestResultsData{$currPlatform}{$currDate}{failedtests}))); 
while (@failedTests) 
{ 
... 

오류 메시지는 다음과 같습니다 작동하도록

Type of argument to keys on reference must be unblessed hashref or arrayref. 

이 코드 줄을 다시 기록 할 수 있습니까?

+0

이보기 당신의 'TestResultsData' 변수의 선언. – toolic

+0

그 정의는 다음과 같습니다. 'my % TestResultsData; ' 이 함수 외 – AlexN

답변

3

$TestResultsData{$currPlatform}{$currDate}{failedtests}의 값은 축복 된 해시 참조입니다. keys은 캡슐화와 오버로딩의 환상을 깨뜨리기 때문에 축복받은 해시 참조에 대해 비겁한 조작을하지 않습니다.

(펄의 이전 버전에서 모든 hashref을 허용하지 것이다 - 당신이 그것을 적절한 해시를 통과 할 필요가 있었다.)

을 수동으로 시도하여 해시에 hashref를 역 참조 :

my @failedtests = sort keys %{ $TestResultsData{$currPlatform}{$currDate}{failedtests} }; 
+0

! ... 해시에 대한 더 많은 독서를 할 시간. 고맙습니다! – AlexN

+0

또한 객체가'@ {}'또는'% {}'를 오버라이드 할 수 있었기 때문에. – ikegami

+3

'keys $ ref'는 실험적이므로'keys % {$ ref}'는 좋은 생각입니다. – ikegami