В Perl, в чем разница между файлами .pm (модуль Perl) и .pl (скрипт Perl)? - PullRequest
83 голосов
/ 04 августа 2010

В чем разница между .pm (модуль Perl) и .pl (скрипт Perl)?

Пожалуйста, также скажите мне, почему мы возвращаем 1 из файла. Если вернуть 2 или что-то еще, это не генерирует никакой ошибки, так почему мы возвращаем 1 из модуля Perl?

Ответы [ 2 ]

73 голосов
/ 04 августа 2010

По сути, используемое расширение файла не имеет значения, как perl интерпретирует эти файлы.

Однако, размещение модулей в файлах .pm следует определенной структуре каталогов, которая следует за пакетомНазвание обеспечивает удобство.Итак, если у вас есть модуль Example::Plot::FourD и вы поместите его в каталог Example/Plot/FourD.pm по пути в вашем @INC, тогда use и require будет делать правильные вещи, когда ему присваивается имя пакета, как в use Example::Plot::FourD.

Файл должен возвращать true в качестве последнего оператора, чтобы указать успешное выполнение любого кода инициализации, поэтомуобычно заканчивать такой файл 1;, если вы не уверены, что в противном случае он вернет true.Но лучше просто поставить 1;, если вы добавите больше операторов.

Если EXPR - пустое слово, require предполагает расширение ".pm" и заменяет "::" на«/» в имени файла, чтобы упростить загрузку стандартных модулей.Эта форма загрузки модулей не рискует изменить ваше пространство имен.

Все, что use делает, это выясняет имя файла из предоставленного имени пакета, require оно в блоке BEGIN ивызвать import на упаковке.Ничто не мешает вам не использовать use, а выполнять эти шаги вручную.

Например, ниже я помещаю пакет Example::Plot::FourD в файл с именем t.pl, загружаю его в сценарий в файл s.pl.

C:\Temp> cat t.pl
package Example::Plot::FourD;

use strict; use warnings;

sub new { bless {} => shift }

sub something { print "something\n" }

"Example::Plot::FourD"

C:\Temp> cat s.pl
#!/usr/bin/perl
use strict; use warnings;

BEGIN {
    require 't.pl';
}

my $p = Example::Plot::FourD->new;
$p->something;


C:\Temp> s
something

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

0 голосов
/ 04 августа 2010

.pl - это отдельный скрипт.

В .pm ( Модуль Perl ) у вас есть функции, которые вы можете использовать из других скриптов Perl:

Модуль Perl - это автономный фрагмент кода Perl, который может использоваться программой Perl или другими модулями Perl.Концептуально он похож на библиотеку ссылок C или класс C ++.

...