Как я могу заставить Perl запускать модуль только из тестовой директории? - PullRequest
1 голос
/ 01 октября 2009

У меня есть файл модуля perl и сценарий тестирования pl, который я использую для запуска какой-либо функции, и после просмотра использования lib и этот предыдущий вопрос здесь ... Я до сих порне знаю, как это сделать.

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

no lib qw(prod_dir);

, и при печати @INC показывает, что каталога больше нет, каким-то образом скрипт все еще вызывает этот другой модуль ...

Я знаю, что это звучит очень глупо, но надеюсь, что кто-нибудь поможет мне увидеть свет здесь :) спасибо.

Ответы [ 2 ]

6 голосов
/ 01 октября 2009

После того, как у вас есть require d или use d модуль, отметьте %INC, чтобы увидеть, откуда он пришел.

Например:

use Data::Dumper;
print $INC{'Data/Dumper.pm'}."\n";

Обратите внимание, что "::" становится "/", и вы добавляете ".pm". Это может дать вам подсказку.

Помните, что текущий каталог (".") Обычно является записью в @INC. Но первым шагом является выяснение, из какого каталога был загружен модуль.

Также следует помнить, что каталоги в @INC ищутся по порядку. use lib добавляется к этому списку (что делает его первым поисковым каталогом), так что вам может потребоваться просто добавить соответствующий каталог.

2 голосов
/ 02 октября 2009

Можете ли вы рассказать больше о том, что вы пытаетесь сделать и как вы пытаетесь это сделать? Это стандартная структура распределения Perl? Если вы не используете стандартную структуру распространения, можете ли вы показать нам список каталогов, чтобы мы знали, где что находится? Можете ли вы также включить код, который вы используете для загрузки модуля? Просто обновите исходный вопрос, когда соберете детали.

Обычно я запускаю тесты через сборщик, который автоматически устанавливает права @INC.

Если я хочу запустить один тест в своем дистрибутиве, я использую модуль blib, чтобы найти библиотеку сборки, в которой есть версии моих модулей для разработки:

 % perl -Mblib t/test.t

Некоторые люди делают то же самое с доказать .

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

Если ваш модуль и тестовый файл просто находятся в одном каталоге, вы пытались добавить текущий каталог в @INC с помощью PERL5LIB?

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