2010-06-29 5 views
24

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

+1

Образец кода perl? См. Http://stackoverflow.com/q/4257179/10468 или поиск вопросов по модулям perl. См. Также (offsite) http://www.sitepoint.com/forums/showthread.php?501379-Perl-require-and-variables – DarenW

ответ

22

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

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

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

5

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

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

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

    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 
    
-1

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

+2

Какое регулирование написания команд Perl нарушается? – alex

23

Это также может случиться, когда заявка не завершена.

use strict; 

sub test; 

test() 

# some comment 
my $x; 

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

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

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

+2

Спасибо! Я рвал волосы. – Zack

0

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

Смежные вопросы