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