2014-10-17 2 views
2

Я очень новичок в perl, и мне была поручена поддержка веб-страницы. Я нашел ошибку, которую я не знаю, как исправить.Тип аргумента для ключей на ссылке не должен быть беспроблемным

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 трусливо отказывается работать на благословенных хэшфитах, потому что это нарушит иллюзию инкапсуляции и перегрузки.

(старые версии Perl не принимать hashref вообще - вам нужно передать ей надлежащий хэш.)

Попробуйте вручную разыменование hashref в хэш с помощью:

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

Это сработало! ... время, чтобы еще немного прочитать хэши. Спасибо! – AlexN

+0

Кроме того, поскольку это означает, что объект мог бы переопределить '@ {}' или '% {}'. – ikegami

+3

Обратите внимание, что 'keys $ ref' является экспериментальным, поэтому' keys% {$ ref} 'является хорошей идеей в любом случае. – ikegami

Смежные вопросы