В чем разница между .pm
(модулем Perl) и .pl
файлом (скриптом Perl)?
Скажите, пожалуйста, почему мы возвращаемся 1
из файла. Если возвращается 2 или что-то еще, это не вызывает ошибок, так почему же мы возвращаемся 1
из модуля Perl?
perl
perl-module
user380979
источник
источник
1
не важно. Может быть2
, может быть"foo"
, может быть["a", "list"]
. Важно то, что это не так0
, или что-то еще, что оценивается как ложное или неuse
сработает.Ответы:
По сути, расширение файла, которое вы используете, не имеет значения, как
perl
интерпретировать эти файлы.Однако размещение модулей в
.pm
файлах по определенной структуре каталогов, следующей за именем пакета, обеспечивает удобство. Итак, если у вас есть модуль,Example::Plot::FourD
и вы помещаете его в каталогExample/Plot/FourD.pm
по пути в вашем@INC
, тогдаuse
иrequire
будет делать правильные вещи, если будет указано имя пакета, как вuse Example::Plot::FourD
.Все, что
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 ) у вас есть функции, которые вы можете использовать из других скриптов Perl:
источник