Подтвердить что ты не робот

Глобальному символу требуется явное имя пакета

Глобальный символ требует явного имени пакета? Почему это произошло и какие различные случаи могут вызвать эту ошибку?

4b9b3361

Ответ 1

Посмотрите perldiag:

Глобальный символ "% s" требует явного имени пакета

(F) Вы сказали "использовать строгую" или "использовать строгие vars", что указывает на то, что все переменные должны лексически охвачены (используя "мое" или "состояние" ), объявленные заранее, используя "наш", или явно квалифицированный, чтобы сказать, в каком пакете находится глобальная переменная (используя "::" ).

Ответ 2

Это также может произойти, когда инструкция before не завершена.

use strict;

sub test;

test()

# some comment
my $x;

perl теперь жалуется на следующее сообщение об ошибке:

my "
Global symbol "$x" requires explicit package name

Ошибка не в объявлении "my", а в точке с точкой с запятой (;) в test().

Ответ 3

Чтобы конкретно сказать, что вызвало это в вашем коде, вам нужно будет опубликовать свой код.

Ошибка выводится, а ваш script остановлен, потому что у вас есть use strict или его производная. Ошибка встречается, потому что ваша программа вызывает переменную из области видимости.

  • Возможно, вы использовали мой или локальный внутри вспомогательной процедуры/функции, но пытаетесь использовать его внутри другой процедуры или вне вызова функции.

     sub foo{
        my $bar=0; 
        our ($soap) = 1;
     }
     foo();
     print $bar        , "\n";  # does not work w/ strict -- bar is only in the scope of the function, not globally defined
     print $main::bar  , "\n";  # will run, but won't be populated
     print $soap       , "\n";  # does not work w/ strict -- the package isn't defined
     print $main::soap , "\n";  # will run and work as intended because of our
    

Ответ 4

используя переменные состояния без use feature "state" или use v5.10, если ключевое слово не записано как состояние CORE::.

Взято из http://perldoc.perl.org/functions/state.html

Ответ 5

В самом деле, если вы используете use strict; и где-то вы пропустите ; в конце инструкции, то следующие утверждения (они имеют идеальный синтаксис) могут поднять Глобальный символ требует явного имени пакета.

Ответ 6

Вы используете оператор use strict;, означающий, что ваши коды должны быть в пределах правил написания команд perl.