Wie zu verwenden Sabu aus Perl-Skript
Aufgabe. Es ist ein Skript in der Programmiersprache Perl. In ihm definiert eine Funktion (Saba).
Muss заиспользовать diese Funktion in einem anderen Skript.
Hier ist ein Beispiel. Es ist ein Skript script.pl
in dem definiert Saba header
. Dieses Sabu überträgst
Zeile, und es gibt diese Zeile in Form von markdown-Header. In diesem Skript dieses Saba
wird verwendet, um anzuzeigen zwei überschriften:
▶ Run
use feature qw(say);
sub header {
my ($string) = @_;
return '## ' . uc($string);
}
say header('one');
say header('two');
Starten Sie perl script.pl
und sehen auf dem Bildschirm:
Aufgabe — erstellen Sie ein weiteres Skript other.pl
wird auch die Verwendung dieses Sabu.
Lösung — copy-paste
Die einfachste (aber schlechte) Lösung ist einfach den Code kopieren Saba in ein anderes Skript. Mit dieser Lösung funktioniert
hier ist ein other.pl
:
use feature qw(say);
sub header {
my ($string) = @_;
return '## ' . uc($string);
}
say header('three');
Nun können Sie dieses Script perl other.pl
und sehen auf dem Bildschirm angezeigten Text ## THREE
.
Dies ist die Lösung des Problems, aber es ist eine schlechte Entscheidung. Aufgrund der Tatsache, dass der gleiche Code ist
in mehreren Dateien wird es schwierig zu arbeiten mit solchen Codes. Wenn nötig ändern
diese Sabu, müssen ändern Sie es in mehreren Orten (und müssen noch nicht vergessen zu tauschen
der Code in den richtigen Dateien).
Lösung — ertragen Sabu in einem separaten Modul
Die richtige Entscheidung zu treffen, ist zu ertragen Sabu in einem separaten Modul. Dazu
erstellen Sie eine Datei lib/Utils.pm
:
package Utils;
use strict;
use warnings;
use Exporter;
our @ISA = qw(Exporter);
our @EXPORT_OK = qw(
header
);
our @EXPORT = @EXPORT_OK;
sub header {
my ($string) = @_;
return '## ' . uc($string);
}
1;
package Utils;
- angekündigt, dass diese "Bibliothek" Utils
use strict;
und use warnings;
— drehen Sie den Modus um Perl wurde immer anspruchsvoller zu einem guten Code
- 5 Zeilen pro
EXPORT
besagen dass, wenn die Verbindung dieser "Bibliothek" muss um die Funktion header
verfügbar war
- hergebracht Funktion
1;
— package, sollte am Ende immer die Wahrheit
Nach dieser Beschreibung der Funktion aus dem Skript script.pl
zu entfernen, aber das hinzufügen von verbindungen der Bibliothek:
use feature qw(say);
use Utils;
say header('one');
say header('two');
Anschließend starten Sie dieses Skript mit dem Befehl perl -Ilib/ script.pl
.
In der Befehlszeile -I
geben den Wert lib/
— Ordner in dem Perl wird
suchen Sie nach der Bibliothek. Die Ergebnisse dieses Skript genau die gleiche wie zuvor.
Und jetzt ganz trivial заиспользовать die gleiche Sabu in einem anderen Skript. Schreiben
das Skript other.pl
, die praktisch die gleiche wie script.pl
:
use feature qw(say);
use Utils;
say header('three');
Führen Sie dieses Skript perl -Ilib/ other.pl
und sehen auf dem Bildschirm ## THREE
.
Lösung — stecken Sie das Skript im Skript
Es gibt noch eine Lösung wie kann Sabu im Skript bestimmte script.pl
заиспользовать im Skript other.pl
. Dazu schreiben Sie den folgenden Text in die Datei other.pl
:
use feature qw(say);
require './script.pl';
say header('three');
Führen Sie das Skript perl other.pl
(Datei other.pl
muss im gleichen Ordner wie das Skript script.pl
).
Ergebnis:
D.h. was passiert beim ausführen des Skripts other.pl
zunächst wurde der gesamte Code, der
wurde in script.pl
(Zeile ## ONE
und ## TWO
), und erst dann ist der Code aus dem Script
other.pl
(Zeile ## THREE
).
Um beim Start des Skripts other.pl
nicht ausgeführt wurde Teil script.pl
wir brauchen ein wenig
ändern script.pl
. Brauchen Sie wickeln den gesamten Code in den Körper-Skript unter der Bedingung einzutragen und an das Ende des Skripts
Einheit wie die wahre Bedeutung:
use feature qw(say);
sub header {
my ($string) = @_;
return '## ' . uc($string);
}
if ( not caller() ) {
say header('one');
say header('two');
}
1;
Wenn wir laufen jetzt perl script.pl
, so erhalten wir genau die gleiche Ausgabe wie zuvor, und
wenn starten perl other.pl
, das in der Ausgabe wird nur den gewünschten Text zu uns ## THREE
.
Stichwort caller
gibt die unterschiedliche Bedeutung, je nachdem wie gestartet wurde
das Skript. Diese Funktion nutzen wir hier, um zu teilen, führen Sie das Skript direkt
vom Anschluss des Skripts unter Verwendung require
.
Andere Artikel
Some parts of this page were machine translated.
Powered by Yandex.Translate
http://translate.yandex.com/