Bareword "NUMBER" не допускается при использовании "строгих сабвуферов" - PullRequest
0 голосов
/ 10 января 2019

код выпуска:

{
    port_id   => { type => SCALAR },
    ipv4_addr => { type => SCALAR },
    gateway   => { type => SCALAR },
    netmask   => { type => SCALAR },
    vlan_id   => { type => NUMBER, optional => 1 },
}

Я использовал «использовать строгий»; в моем файле pm, и на основании информации об ошибке "Bareword" NUMBER "не разрешено, пока используется" строгая подпрограмма "", я знаю, что мне нужно добавить '' для типов, таких как 'NUMBER'. Но раньше в моем коде не было типа NUMBER, и я не добавил '' для этих типов, и он не сообщил об ошибках. Итак, я хочу знать, почему NUMBER особенный?

1 Ответ

0 голосов
/ 10 января 2019

Без use strict 'subs'; идентификаторы, которые не имеют другого грамматического значения, обрабатываются как строковые литералы, которые выдают себя при оценке. Это очень подвержено ошибкам (потому что это легко приводит к тому, что код выполняет одну вещь, когда ожидается выполнение другой), поэтому мы все используем use strict 'subs'; в нашем коде, чтобы избавить нас от этой ошибочной функции.

Если вы хотите создать оператор, который выдает строку NUMBER или SCALAR при использовании use strict 'subs';, вам нужно использовать что-то отличное от NUMBER и SCALAR. Как вы упомянули, вы можете использовать 'NUMBER' и 'SCALAR'.

Другая возможность состоит в том, что NUMBER должно быть именем константы, но вы забыли объявить / импортировать константу. Это именно тот тип ошибки, который use strict 'subs'; должен отловить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...