Как мне предварительно объявить пакет в Perl? - PullRequest
0 голосов
/ 08 октября 2019

Я пытаюсь избавиться от предупреждающего сообщения, которое имеет следующее объяснение в perldiag:

Bareword "%s" refers to nonexistent package (W bareword) Вы использовали квалифицированное голое слово формы "Foo ::", но компилятор не видел других применений этого пространства имен до этого момента. Возможно, вам нужно предварительно объявить пакет?

(Проблема в том, что у меня есть подпрограмма, которая связывает объект в пакет, который объявлен позже)

Я хочу последовать советуна странице руководства, «предварительно выделив» пакет, но я не могу понять, как это сделать. Каков синтаксис для предварительного объявления пакета в Perl?

Ответы [ 2 ]

2 голосов
/ 09 октября 2019

Foo:: идентичен 'Foo' за исключением того, что он предупреждает, если пакет не существует.

Вы можете отключить предупреждение, создав пакет. Оба следующих утверждения достигают этого:

{ package Foo; }

package Foo { }   # 5.14+

Но это очень глупо. Зачем использовать синтаксис, который выполняет проверку пакета, если вы просто собираетесь игнорировать проверку? Было бы намного лучше использовать следующее:

my $self = bless({}, 'Foo');

Другой вариант -

no warnings qw( bareword );
my $self = bless({}, Foo::);

Это сигнализирует читателю, что вы знаете, что используете пакет, который несуществует еще.

2 голосов
/ 08 октября 2019

Ваша проблема не в том, чтобы предварительно объявить пакет (что можно сделать, просто объявив пакет в отдельной области видимости), но это благословение просто берет строку, и вам не нужно использовать необычный синтаксис голого слова Foo::создать его (таким образом вызывая предупреждение).

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