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

78

В чем разница между .pm (Perl-модулем) и .pl (Perl script) файлом?

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

  • 10
    1 не имеет значения. Это может быть 2 , это может быть "foo" , это может быть ["a", "list"] . Важно то, что это не 0 , или что-то еще, что оценивается как ложное, или use потерпит неудачу.
  • 0
    .pl на самом деле является библиотекой perl - perl-скрипты, подобно программам на Си или программам, написанным на других языках, не имеют окончания, кроме как в операционных системах, которые нуждаются в них для работы, таких как windows.
Теги:
perl-module

2 ответа

66

В самом ядре расширение файла, которое вы используете, не имеет значения, как 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, загружал его в файл script в файле 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, любое истинное значение будет делать.

-2

A.pl - это единственный script.

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

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

  • 5
    «.Pl - это один скрипт». Не правда. Только на сломанных операционных системах вам нужно идентифицировать Perl-программы с расширением .pl. Первоначально .pl указывал на «библиотеку Perl» - внешние подпрограммы, которые вы загружали с помощью команд «require» или «do».

Ещё вопросы

Сообщество Overcoder
Наверх
Меню