Как я могу легко добавить неустановленные модули Perl из моего каталога разработки в @INC?

Я пишу Perl t/*. T тесты для существующего проекта. Во время разработки я хотел бы использовать команду "доказательства" для запуска выбранных тестов на произвольной глубине в иерархии каталогов модулей. Я создал несколько каталогов t / на той же глубине, что и файлы *.pm, которые я хотел бы проверить. К сожалению, lib/ в основе кода проекта находится не в @INC.

Каков наилучший способ автоматического определения и добавления пути к @INC? Я посмотрел на опцию -b, чтобы доказать и blib в целом, но, похоже, они не работают (они берут pwd, добавляют к нему blib/lib и добавляют его в @INC). В идеале решение не требует переменной среды или установки модулей и будет содержать несколько рабочих копий одного и того же кода.

Мой подход неверен? Есть что-то очевидное, что я упускаю? Модули CPAN, похоже, решают эту проблему путем установки или скопированных блоков кода в верхней части файлов *.t (хм).

Редактировать:

Структура выглядит так:

/home/user/proj/branch\_foo/lib/First/Second/Third.pm
/home/user/proj/branch\_foo/lib/First/Second/t/third.t

Это работает:

~/proj/branch\_foo/lib/First/Second$ prove -I../..

Но я бы хотел:

~/proj/branch\_foo/lib/First/Second$ prove -r

Или же:

~/proj/branch\_foo/lib/First/Second$ prove t/third.t

Так что я могу сделать:

~/proj/branch\_foo/lib$ prove -r

Вместо:

~/proj/branch\_foo/lib$ prove -I. -r

Может быть, я просто должен использовать -I и справиться с этим.

3 ответа

Решение

доказать есть -I опция командной строки:

-I Библиотечные пути для включения.

Можете ли вы указать пути, используя эту опцию?

Обновить:

Спасибо за предоставление макета. Сейчас я не могу придумать быстрого решения, но, возможно, вы можете использовать файлы .proverc в соответствующих каталогах, чтобы сократить требуемую печать. Я не уверен, как многократный .proverc файлы взаимодействуют с -r вариант, но это то, что нужно посмотреть.

Именно поэтому существует модуль blib. Он просматривает текущий каталог, а затем его родительские каталоги, которые ищут blib/lib для добавления в @INC. Это часть стандартной библиотеки Perl, так что она у вас уже должна быть.

Где-то из t/ вы можете использовать ключ -M для загрузки blib:

% perl -Mblib test.t

Если вы хотите использовать его с доказать

% perl -Mblib prove test.t

Я думаю, что это должно быть то же самое, что и ключ -b в доказательствах, но в прошлый раз, когда я попробовал это (давным-давно), это не сработало. Возможно они исправили это, чтобы работать как blib.pm:

% prove -b test.t

Обратите внимание, что для этого нужно сначала создать дистрибутив, а не тестировать из lib /, но вы все равно должны это делать.:)

Вы можете установить переменную среды PERL5LIB (как описано в perldoc perlrun) который вызовет perl предварять разделенные двоеточием пути к вашему @INC:

% export PERL5LIB=/absolute/path/to/your/libraries
% cd into/part/of/your/test/suite
% prove -r
Другие вопросы по тегам