Вопрос о пакетах Perl

Я новичок в Перле.

Я загрузил perl-приложение, в исходном файле которого есть такая строка:

 use PWING::Utils::Utils;

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

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

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

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

    PWING - 
          Utils - 
                 Utils.pm ?

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


person EugeneP    schedule 12.07.2010    source источник
comment
Используете ли вы Windows и ActivePerl ActiveState или Linux? Какое приложение вы загрузили? PWING::Utils::Utils не похоже на модуль CPAN.   -  person Mike    schedule 12.07.2010


Ответы (2)


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

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

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

require SomeModule;
require "SomeModule.pm";

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

...

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

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

@ИНК

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

use lib '/mypath/libdir/';
use SomeMod;
person Greg Bacon    schedule 12.07.2010

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

 lib/PWING/Utils/Utils.pm

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

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

person Community    schedule 12.07.2010