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 сможет его найти.