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