Perl пакеты вопрос

Я новичок в Perl.

Я скачал Perl-приложение, которое имеет такую ​​строку в исходном файле:

 use PWING::Utils::Utils;

Он импортирует файл, как кажется.

Я скачал плагин для Eclipse [интеграция Perl-Eclipse]. Когда я пытаюсь запустить этот файл как приложение perl, он говорит, что не может найти импортированный ресурс.

Теперь вопрос в том, как выглядит структура пакета perl?

Эта строка означает, что должна быть структура каталога, подобная этой:

    PWING - 
          Utils - 
                 Utils.pm ?

Я вижу, что приложение, которое я скачал, не содержит такой структуры, так как можно и нужно запускать?

2 ответа

Решение

В документации perlmod указано

Все файлы модулей Perl имеют расширение .pm, use оператор предполагает это, так что вам не нужно прописывать "Module.pm" в кавычках. Это также помогает отличать новые модули от старых .pl а также .ph файлы. Имена модулей также пишутся с заглавной буквы, если они не функционируют как прагмы; прагмы в действительности являются директивами компилятора, и их иногда называют "прагматическими модулями" (или даже "прагматами", если вы классик).

Два заявления:

require SomeModule;
require "SomeModule.pm";

отличаются друг от друга двумя способами. В первом случае любые двойные двоеточия в имени модуля, такие как Some::Module, переводятся в разделитель каталогов вашей системы, обычно "/".

...

Пакеты Perl могут быть вложены в другие имена пакетов, поэтому у нас могут быть имена пакетов, содержащие ::, Но если бы мы использовали это имя пакета непосредственно в качестве имени файла, это сделало бы для громоздких или невозможных имен файлов в некоторых системах. Поэтому, если имя модуля, скажем, Text::Soundex, тогда его определение действительно находится в файле библиотеки Text / Soundex.pm.

Специальный @INC массив содержит каталоги для поиска модулей:

@INC

Массив @INC содержит список мест, которые do EXPR, require, или же use конструкции ищут свои библиотечные файлы. Первоначально он состоит из аргументов любого -I переключатели командной строки, за которыми следует библиотека Perl по умолчанию, вероятно /usr/local/lib/perl, с последующим ".", для представления текущего каталога. ("." не будет добавлено, если включены проверки на заражение -T или -t.) Если вам нужно изменить это во время выполнения, вы должны использовать use lib Прагма для правильной загрузки машинно-зависимой библиотеки:

use lib '/mypath/libdir/';
use SomeMod;

В системе Unix этот файл будет найден в каталоге вида

 lib/PWING/Utils/Utils.pm

но проблема в том, чтобы определить, где может находиться каталог верхнего уровня 'lib'.

Если модуль установлен в вашей системе, он будет помещен в место, где Perl сможет его найти.

Другие вопросы по тегам