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