Ошибка при использовании неинициализированной переменной в выражении в файле шаблона

Я пытаюсь обработать файл шаблона, используя инструментарий шаблона версии 2.29 и perl 5.28.1. Я получаю предупреждение ниже при обработке файла шаблона
Аргумент "" не является числовым в дополнение (+) в строке xyz
Я думаю, это потому, что в файле шаблона у нас есть неинициализированные переменные, которые используются в арифметическом выражении.
Необходимо ли инициализировать переменную перед ее использованием в выражении, если используется шаблонный инструментарий версии 2.29? В приведенном ниже коде появляется предупреждение для строки 5.

Ниже приведен фрагмент кода.

[%- groups = {} -%] <br/>
[%- cols = [ 10, 10, 20, 30 ] -%] <br/>
[%- FOREACH c IN cols -%] <br/>
   [%- val = c -%] <br/>
   [%- groups.$val = groups.$val + 1 -%] <br/>
[%- END -%] <br/>

Если мы инициализируем groups.$val перед использованием его в выражении, предупреждения не будет.
У меня не возникло этой проблемы при использовании набора шаблонов версии 2.15. Не знаете, что изменилось в версии 2.29 (или в любой другой версии выше 2.15), что вызывает предупреждение?


person alekh chaudhary    schedule 10.06.2019    source источник
comment
Если вы используете -w, вы можете попробовать вместо этого использовать use warnings;. Может не иметь значения.   -  person ikegami    schedule 10.06.2019


Ответы (1)


Это не ошибка, это предупреждение.

Если вы не хотите получать предупреждения, просто заполните переменную при назначении ей:

[%- groups.$val = (groups.$val || 0) + 1 -%]

или, может быть

[%- groups.$val = (groups.$val.defined ? groups.$val : 0) + 1 -%]

К сожалению, нет оператора, подобного ++ или += в Perl, который пропускал бы предупреждения, как это делают операторы в Perl.

person choroba    schedule 10.06.2019
comment
Спасибо @choroba. Я хочу знать, что изменилось между версией 2.15 и 2.29, что это предупреждение начало приходить. Я не видел никаких предупреждений при использовании шаблонного инструментария версии 2.15. - person alekh chaudhary; 10.06.2019
comment
Я не вижу ничего подходящего в Изменения... - person choroba; 10.06.2019