Im Kern macht die von Ihnen verwendete Dateierweiterung keinen Unterschied, wie perl
diese Dateien interpretiert werden.
Das Einfügen von Modulen in .pm
Dateien, die einer bestimmten Verzeichnisstruktur folgen, die dem Paketnamen folgt, bietet jedoch eine Annehmlichkeit. Also, wenn Sie ein Modul haben Example::Plot::FourD
und setzen Sie es in einem Verzeichnis Example/Plot/FourD.pm
in einem Pfad in Ihrem @INC
, dann use
und require
das Richtige tun , wenn Sie den Paketnamen als in gegeben use Example::Plot::FourD
.
Die Datei muss als letzte Anweisung true zurückgeben, um die erfolgreiche Ausführung eines Initialisierungscodes anzuzeigen. Daher ist es üblich, eine solche Datei mit zu beenden 1;
, es sei denn, Sie sind sicher, dass sie andernfalls true zurückgibt. Aber es ist besser, nur das zu setzen 1;
, falls Sie weitere Anweisungen hinzufügen.
Wenn EXPR
es sich um ein Barwort handelt, require
nimmt das eine ".pm" -Erweiterung an und ersetzt für Sie "::" durch "/" im Dateinamen, um das Laden von Standardmodulen zu vereinfachen. Diese Form des Ladens von Modulen birgt kein Risiko, Ihren Namespace zu ändern.
Alles, was Sie use
tun müssen, ist, den Dateinamen aus dem angegebenen Paketnamen require
in einem BEGIN
Block herauszufinden und import
das Paket aufzurufen . Nichts hindert Sie daran use
, diese Schritte nicht manuell zu verwenden.
Zum Beispiel habe ich das Example::Plot::FourD
Paket unten in eine Datei namens aufgerufen t.pl
und es in ein Skript in einer Datei geladen 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
Dieses Beispiel zeigt, dass Moduldateien nicht enden müssen, sondern dass 1
ein wahrer Wert ausreicht.
1
ist egal. Es kann sein2
, es kann sein"foo"
, es kann sein["a", "list"]
. Was zählt, ist, dass es nicht0
oder irgendetwas anderes als falsch bewertet wird oderuse
fehlschlagen würde.