Глобальный символ требует явного имени пакета - PullRequest
26 голосов
/ 29 июня 2010

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

Ответы [ 6 ]

25 голосов
/ 15 января 2012

Это также может произойти, если предыдущий оператор не завершен.

use strict;

sub test;

test()

# some comment
my $x;

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

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

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

23 голосов
/ 29 июня 2010

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

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

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

7 голосов
/ 30 июня 2010

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

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

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

     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
    
0 голосов
/ 31 мая 2016

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

0 голосов
/ 02 декабря 2015

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

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

0 голосов
/ 19 мая 2011

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

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