2014-09-23 3 views
0

У меня есть большой проект, требующий обслуживания. Если я запускаю файл на ЦМД, он отлично работаетPerl on Eclipse (плагин EPIC) против отдельного: глобальный символ «% Config» требует явного имени пакета

perl entry.pl 

Однако, если я бегу с Eclipse (с помощью EPIC плагин для Perl), он выдает следующее сообщение об ошибке

Global symbol "%Config" requires explicit package name at C:/Perl64/lib/Errno.pm line 11 

Я заметил, что проект включает в себя файл config.pm. Обратите внимание, что «c» имеет строчный регистр в config.pm, но верхний регистр в «% Config». Я думал, что perl чувствителен к регистру. Я предполагаю, что одно решение будет переименовывать config.pm и все его ссылки на что-то еще (как предложено в Perl installation broken).

Есть ли способ исправить это, кроме как переименовать все ссылки на config.pm?

Почему это работает при запуске на cmd, но не на Eclipse?

+2

Он жалуется на переменную '% Config', а не на' config.pm'. Их называют одинаковым - это совпадение. Вероятно, вам просто нужно установить правильный рабочий каталог в Eclipse (с которым я не знаком, извините). – AKHolland

+0

@AKHolland После того, как я переименовал config.pm и все его ссылки, он работал, но я ищу более простое решение. – Mathai

+0

% Config, ожидаемое lib/Errno.pm, было в lib/Config.pm. ваш config.pm, вероятно, перепутался с пространством имен, чтобы случайно запутать компилятор. Рад, что ты справился. –

ответ

1

Поскольку я решил эту проблему. Я думал, что отвечу, чтобы он помог кому-то другому.

На Eclipse по какой-то причине, когда config.pm «столкнулся» с perl, встроенным в Config.pm, хотя «c» - это разные случаи. Если config.pm является частью большого проекта, переименование всех ссылок на конфигурацию класса на что-то другое чрезвычайно сложно. Проще всего переместить Config.pm в новый каталог (например MyMod) и имеют

package MyMod::config; 

в Config.pm

с этим, мне нужно только изменить use config к

use MyMod::config; 

Это решение работает как на EPIC, так и снаружи (в командной строке)