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