Между чем Различие .pm
(Модуль Perl) и .pl
(Сценарий Perl) файл?
Также скажите мне, почему мы возвращаемся 1
из файла. Если возврат 2 или что-либо еще, это не генерирует ошибки, итак, почему мы возвращаемся 1
от модуля Perl?
По сути, расширение файла, которое вы используете, не имеет никакого значения для того, как 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
, подойдет любое истинное значение.
.pl - это отдельный скрипт.
В .pm (Perl Module) находятся функции, которые можно использовать из других Perl-сценариев:
Perl-модуль - это самодостаточная часть Perl-кода, которая может использоваться Perl-программой или другими Perl-модулями. Концептуально он похож на библиотеку связей C или класс C++.