Я не уверен, что ниже делает именно на:Perl скалярная и JSON
скалярной% {$} единиц
в ниже:
if (defined($units) && scalar %{ $units}) {
Скрипт запускает большую часть записей, но появляется, когда он доходит до конца, и возникает эта ошибка.
hash- или ссылку на массив ожидаемой (не простой скаляр, используйте allow_nonref для позволяют это) в /usr/share/perl5/JSON.pm линии 154.
я не могу разделить гораздо больше код из-за ограничений, но я пытаюсь это исправить, так что не возникает эта ошибка, но мне не хватает понимания выше использования:
скалярной% {$} единиц
Чтобы правильно диагностировать происходящее на данном этапе.
Казалось бы, это массив хэшей, и мы проверяем, есть ли у него что-нибудь в нем?
Комментарий выше этой линии говорит:
# We only want to move on if there were units for this timeframe
Эта строка будет лучше написана как 'if ('HASH' eq ref $ units && scalar keys% $ units) {...', потому что кажется, что нужно проверить, что '$ units' содержит hashref, и что хэш, к которому он относится, содержит элементы. – DavidO
@DavidO: Я не вижу причин предполагать, что код пытается проверить, что он содержит hashref; смотрит на меня так же, как предполагает, что это hashref (и OP не указывает на то, что там будет ошибка, которая произошла бы, если бы это было плохое предположение) – ysth
Вот почему вы всегда должны «использовать strict;». Если '$ units' не является хеш-ссылкой, вы получите ошибку компиляции, например' Can not use string ("foo") как HASH ref, в то время как «строгие refs» используются в строке prog.pl 10. «со строгими включен. – ThisSuitIsBlackNot