В Perl, каково различие между .pm (модуль Perl) и .pl (сценарий Perl) файл?

Между чем Различие .pm (Модуль Perl) и .pl (Сценарий Perl) файл?

Также скажите мне, почему мы возвращаемся 1 из файла. Если возврат 2 или что-либо еще, это не генерирует ошибки, итак, почему мы возвращаемся 1 от модуля Perl?

84
задан Sinan Ünür 27 June 2012 в 17:00
поделиться

2 ответа

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

74
ответ дан 24 November 2019 в 08:39
поделиться

.pl - это отдельный скрипт.

В .pm (Perl Module) находятся функции, которые можно использовать из других Perl-сценариев:

Perl-модуль - это самодостаточная часть Perl-кода, которая может использоваться Perl-программой или другими Perl-модулями. Концептуально он похож на библиотеку связей C или класс C++.

-2
ответ дан 24 November 2019 в 08:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: