Sök…


Syntax

  • kräver modul :: namn; # Kräv med namn från @INC
  • kräva "sökväg / till / fil.pm"; # Kräv efter relativ väg från @INC
  • använd modul :: namn; # kräver och standardimport vid BEGIN
  • använd modul :: Namn (); # kräver och ingen import på BEGIN
  • använd modul :: namn (@ARGS); # kräva och importera med args på BEGIN
  • använd modul :: Namn VERSION; # kräva, versionskontroll och standardimport vid BEGIN
  • använd modul :: Namn VERSION (); # kräva, versionskontroll och ingen import vid BEGIN
  • använd modul :: Namn VERSION (@ARGS); # kräva, versionskontroll, import med args på BEGIN
  • gör "sökväg / till / fil.pl"; # ladda och utvärdera den givna filen

Utför innehållet i en annan fil

do './config.pl';

Detta läser in innehållet i filen config.pl och kör den. (Se även: perldoc -f do .)

OBS: Undvik att do inte golf eller något eftersom det inte finns några felkontroller. För att inkludera biblioteksmoduler, require eller use .

Laddar en modul vid körning

require Exporter;

Detta säkerställer att Exporter modulen laddas vid körning om den inte redan har importerats. (Se även: perldoc -f require .)

OBS: De flesta användare bör use moduler snarare än att require dem. Till skillnad från use require inte call modulens importmetod och körs under körning, inte under kompilering.

Det här sättet att ladda moduler är användbart om du inte kan bestämma vilka moduler du behöver före körning, till exempel med ett plugin-system:

package My::Module;
my @plugins = qw( One Two );
foreach my $plugin (@plugins) {
    my $module = __PACKAGE__ . "::Plugins::$plugin";
    $module =~ s!::!/!g;
    require "$module.pm";
}

Detta skulle försöka ladda My::Package::Plugins::One and My::Package::Plugins::Two . @plugins borde naturligtvis komma från någon användarinmatning eller en konfigurationsfil för att detta ska vara meningsfullt. Observera substitutionsoperatören s!::!/!g som ersätter varje kolonpar med en snedstreck. Detta beror på att du bara kan ladda moduler med den bekanta modulens syntax från use om modulnamnet är ett barord. Om du passerar en sträng eller en variabel måste den innehålla ett filnamn.

Med hjälp av en modul

use Cwd;

Detta kommer att importera Cwd modulen vid sammanställningstiden och importera dess standardsymboler, dvs göra några av modulens variabler och funktioner tillgängliga för koden som använder den. (Se även: perldoc -f use .)

I allmänhet kommer detta att göra rätt sak. Ibland vill du dock styra vilka symboler som importeras. Lägg till en lista med symboler efter modulnamnet som ska exporteras:

use Cwd 'abs_path';

Om du gör detta importeras endast de symboler du anger (dvs. standarduppsättningen importeras inte).

När du importerar flera symboler är det idiomatiskt att använda listan för att bygga qw() :

use Cwd qw(abs_path realpath);

Vissa moduler exporterar en delmängd av sina symboler, men kan få höra att exportera allt med :all :

use Benchmark ':all';

(Observera att inte alla moduler känner igen eller använder taggen :all ).

Använda en modul i en katalog

use lib 'includes';
use MySuperCoolModule;

use lib 'includes'; lägger till den relativa katalogen includes/ som en annan @INC i @INC . Så antar att du har en MySyperCoolModule.pm inuti includes/ , som innehåller:

package MySuperCoolModule;

Om du vill kan du gruppera så många egna moduler i en enda katalog och göra dem tillgängliga med en- use lib sats.

Vid denna punkt kräver du att du använder subroutinerna i modulen prefixing av subroutine-namnet med paketnamnet:

MySuperCoolModule::SuperCoolSub_1("Super Cool String");

För att kunna använda subroutines utan prefixet måste du exportera subroutine-namnen så att de känns igen av programmet som kallar dem. Export kan ställas in för att vara automatisk, alltså:

package MySuperCoolModule;
use base 'Exporter';
our @EXPORT = ('SuperCoolSub_1', 'SuperCoolSub_2');

Sedan i filen som use s-modulen kommer dessa underprogram automatiskt att vara tillgängliga:

use MySuperCoolModule;
SuperCoolSub_1("Super Cool String");

Eller så kan du ställa in modulen för att villkorligt exportera subroutiner, således:

package MySuperCoolModule;
use base 'Exporter';
our @EXPORT_OK = ('SuperCoolSub_1', 'SuperCoolSub_2');

I vilket fall måste du uttryckligen begära att de önskade subroutinerna ska exporteras i skriptet som use s-modulen:

use MySuperCoolModule 'SuperCoolSub_1';
SuperCoolSub_1("Super Cool String");

CPAN.pm

CPAN.pm är en Perl-modul som gör det möjligt att fråga och installera moduler från CPAN-webbplatser.

Det stöder interaktivt läge som åberopas med

cpan

eller

perl -MCPAN -e shell

Frågor om moduler

Vid namn:

cpan> m MooseX::YAML

Genom en regex mot modulnamn:

cpan> m /^XML::/

Obs: för att aktivera en personsökare eller omdirigera till en filanvändning | eller > shell omdirigering (mellanslag är obligatoriska runt | och > ), t.ex.: m /^XML::/ | less .

Efter distribution:

cpan> d LMC/Net-Squid-Auth-Engine-0.04.tar.gz

Installera moduler

Vid namn:

cpan> install MooseX::YAML

Efter distribution:

cpan> install LMC/Net-Squid-Auth-Engine-0.04.tar.gz

Lista alla installerade moduler

Från kommandoraden:

cpan -l

Från ett Perl-skript:

use ExtUtils::Installed;
my $inst = ExtUtils::Installed->new();
my @modules = $inst->modules();


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow