Perl Language
Pakiety i moduły
Szukaj…
Składnia
- wymagają modułu :: Nazwa; # Wymagaj według nazwy z @INC
- wymagają „path / to / file.pm”; # Wymagaj według ścieżki względnej z @INC
- użyj modułu :: Nazwa; # wymagaj domyślnego importu na BEGIN
- użyj Module :: Name (); # wymaga i nie wymaga importu w BEGIN
- użyj Module :: Name (@ARGS); # wymagaj i importuj z argumentami na BEGIN
- użyj modułu :: Nazwa WERSJA; # wymagają, sprawdź wersję i domyślny import na BEGIN
- użyj Module :: Name VERSION (); # wymagają, sprawdź wersję i nie importuj na BEGIN
- użyj Module :: Name VERSION (@ARGS); # wymagają, sprawdź wersję, importuj z argumentami na BEGIN
- do „path / to / file.pl”; # załaduj i ewaluuj podany plik
Wykonywanie zawartości innego pliku
do './config.pl';
Przeczyta to zawartość pliku config.pl i uruchomi go. (Zobacz też: perldoc -f do
.)
Uwaga: Unikaj do
chyba że grasz w golfa lub coś takiego, ponieważ nie ma sprawdzania błędów. Aby dołączyć moduły biblioteczne, użyj require
lub use
.
Ładowanie modułu w czasie wykonywania
require Exporter;
Zapewni to załadowanie modułu Exporter
w czasie wykonywania, jeśli nie został jeszcze zaimportowany. (Zobacz też: perldoc -f require
.)
Uwaga: większość użytkowników powinna raczej use
modułów niż ich require
. W odróżnieniu od use
, require
nie wywołuje metody importu modułu i jest wykonywane w czasie wykonywania, a nie podczas kompilacji.
Ten sposób ładowania modułów jest przydatny, jeśli nie możesz zdecydować, które moduły potrzebujesz przed uruchomieniem, na przykład w systemie wtyczek:
package My::Module;
my @plugins = qw( One Two );
foreach my $plugin (@plugins) {
my $module = __PACKAGE__ . "::Plugins::$plugin";
$module =~ s!::!/!g;
require "$module.pm";
}
Spowoduje to próbę załadowania My::Package::Plugins::One
i My::Package::Plugins::Two
. @plugins
powinno oczywiście pochodzić z danych wejściowych użytkownika lub pliku konfiguracyjnego, aby miało to sens. Zwróć uwagę na operator podstawienia s!::!/!g
który zastępuje każdą parę dwukropków ukośnikiem. Wynika to z faktu, że moduły można ładować przy użyciu znanej składni nazwy modułu z use
tylko wtedy, gdy nazwa modułu jest gołym słowem. Jeśli przekażesz ciąg znaków lub zmienną, musi ona zawierać nazwę pliku.
Korzystanie z modułu
use Cwd;
Spowoduje to zaimportowanie modułu Cwd
w czasie kompilacji i zaimportowanie jego domyślnych symboli, tj. Udostępnienie niektórych zmiennych i funkcji modułu kodowi, który go używa. (Zobacz też: perldoc -f use
.)
Ogólnie rzecz biorąc, zrobi to dobrze. Czasami jednak będziesz chciał kontrolować, które symbole są importowane. Dodaj listę symboli po nazwie modułu, aby wyeksportować:
use Cwd 'abs_path';
Jeśli to zrobisz, tylko określone przez Ciebie symbole zostaną zaimportowane (tzn. Domyślny zestaw nie zostanie zaimportowany).
Podczas importowania wielu symboli idiomatyczne jest używanie konstrukcji budującej listy qw()
:
use Cwd qw(abs_path realpath);
Niektóre moduły eksportują podzbiór ich symboli, ale można powiedzieć, że eksportuje wszystko za pomocą :all
:
use Benchmark ':all';
(Uwaga: nie wszystkie moduły rozpoznają lub używają znacznika :all
).
Korzystanie z modułu w katalogu
use lib 'includes';
use MySuperCoolModule;
use lib 'includes';
dodaje katalog względny includes/
jako kolejną ścieżkę wyszukiwania modułów w @INC
. Załóżmy, że masz plik modułu MySyperCoolModule.pm
wewnątrz includes/
, który zawiera:
package MySuperCoolModule;
Jeśli chcesz, możesz zgrupować dowolną liczbę własnych modułów w jednym katalogu i uczynić je możliwymi do znalezienia za pomocą jednej instrukcji use lib
.
W tym momencie użycie podprogramów w module będzie wymagało poprzedzenia nazwy podprogramu nazwą pakietu:
MySuperCoolModule::SuperCoolSub_1("Super Cool String");
Aby móc korzystać z podprogramów bez prefiksu, musisz wyeksportować nazwy podprogramów, aby zostały rozpoznane przez program je wywołujący. Eksport można ustawić na automatyczny, a zatem:
package MySuperCoolModule;
use base 'Exporter';
our @EXPORT = ('SuperCoolSub_1', 'SuperCoolSub_2');
Następnie w pliku use
modułu te podprogramy będą automatycznie dostępne:
use MySuperCoolModule;
SuperCoolSub_1("Super Cool String");
Lub możesz skonfigurować moduł do warunkowego eksportu podprogramów, a zatem:
package MySuperCoolModule;
use base 'Exporter';
our @EXPORT_OK = ('SuperCoolSub_1', 'SuperCoolSub_2');
W takim przypadku musisz jawnie poprosić o wyeksportowanie żądanych podprogramów w skrypcie use
modułu:
use MySuperCoolModule 'SuperCoolSub_1';
SuperCoolSub_1("Super Cool String");
CPAN.pm
CPAN.pm
to moduł Perla, który pozwala wyszukiwać i instalować moduły z witryn CPAN.
Obsługuje wywoływany tryb interaktywny
cpan
lub
perl -MCPAN -e shell
Moduły zapytań
Wg nazwy:
cpan> m MooseX::YAML
Przez wyrażenie regularne względem nazwy modułu:
cpan> m /^XML::/
Uwaga: aby włączyć pager lub przekierowanie do pliku użyj |
lub >
przekierowanie powłoki (spacje są obowiązkowe wokół |
i >
), np .: m /^XML::/ | less
Według dystrybucji:
cpan> d LMC/Net-Squid-Auth-Engine-0.04.tar.gz
Instalowanie modułów
Wg nazwy:
cpan> install MooseX::YAML
Według dystrybucji:
cpan> install LMC/Net-Squid-Auth-Engine-0.04.tar.gz
Wyświetl wszystkie zainstalowane moduły
Z linii poleceń:
cpan -l
Ze skryptu Perla:
use ExtUtils::Installed;
my $inst = ExtUtils::Installed->new();
my @modules = $inst->modules();