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

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

27
задан tchrist 3 August 2013 в 17:13
поделиться

2 ответа

Взгляните на perldiag :

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

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

25
ответ дан 28 November 2019 в 04:56
поделиться

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

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

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

      sub foo {
    мой $ bar = 0;
    наш ($ soap) = 1;
     }
    foo ();
    напечатать $ bar, "\ n"; # не работает со строгим - панель находится только в области действия функции, а не определяется глобально
    напечатать $ main :: bar, "\ n"; # будет работать, но не будет заполнен
    напечатать $ soap, "\ n"; # не работает со строгим - пакет не определен
    напечатать $ main :: soap, "\ n"; # будет работать по назначению из-за наших
    
7
ответ дан 28 November 2019 в 04:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: