Яка різниця між файлом .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
не вдається.