2009-12-08 13 views
9

Ich habe ein Perl-Skript, das sehr groß wird, also möchte ich es in mehrere Skripte aufteilen. Ich möchte nämlich einige große Hash-Deklarationen herausnehmen und sie in eine andere Datei einfügen. Wie bekomme ich das ursprüngliche Skript, um die Variablen zu sehen und zu verwenden, die jetzt im anderen Skript deklariert werden?Wie kann ich ein Perl-Skript erhalten, um Variablen in einem anderen Perl-Skript zu sehen?

Das treibt mich verrückt, weil ich nicht Perl in eine Zeit lang und für das Leben von mir herausfinden kann dies nicht aus

Antwort

15

Verwenden Sie ein Modul:

package Literature; 

our %Sidekick = (
    Batman => "Robin", 
    Bert => "Ernie", 
    Don => "Sancho", 
); 

1; 

Zum Beispiel:

#! /usr/bin/perl 

use Literature; 

foreach my $name (keys %Literature::Sidekick) { 
    print "$name => $Literature::Sidekick{$name}\n"; 
} 

Ausgang:

$ ./prog 
Bert => Ernie 
Batman => Robin 
Don => Sancho 
+5

Ich würde argumentieren, dass Bert Ernies Kumpel war, aber ansonsten ein schönes Beispiel. –

+4

Mit ein wenig Exporter magic konnten wir sogar literatur qw (Sidekicks) verwenden und müssen nicht den vollen Paketnamen verwenden. Es würde das Paket komplexer machen, aber am Ende lohnt es sich. –

+0

Vergiss nicht die 1! Es ist wichtig! Ich weiß, du hast es gbacon, aber es ist einer, der Leute beißt. –

10

Sie verwenden modules verwendet haben. Oder modulinos.

Machen Sie es zu einem Modul, das (optional!) Einige Variablen oder Funktionen exportiert. Sehen Sie nach, wie Sie das Modul Exporter verwenden.

+0

Ich sah das, aber könnte schwören, es gab einen einfacheren Weg. Ich könnte am Ende eines langen Tages nur verrückt werden ... – John

+8

@John: Ja, es gibt andere Wege, aber sie verletzen Best Practices und so soll hier nicht veröffentlicht werden. – Ether

+0

Es ist der wartungsfreundlichste Weg, und auf lange Sicht der beste Weg. Wenn Sie müssen, können Sie die 'do'-Funktion verwenden, um ein anderes Perl-Skript auszuführen, so dass Sie alle Ihre Variablendeklarationen in" myvars.pl "und dann" do myvars.pl "' setzen können, aber wenn Sie dies tun, Es kommt zu dem Punkt, an dem Sie ein Modul verwenden sollten. –

4

Als Ergänzung zu den anderen Vorschlägen "ein Modul verwenden", wenn Sie planen, Wenn Sie das Modul häufig wiederverwenden, sollten Sie es entweder in Ihre Site-Bibliothek (normalerweise unter) installieren 210.

Wenn nicht (vielleicht hat es außerhalb des Skripts beschränkt Wiederverwertbarkeit), können Sie es in das Verzeichnis mit Ihrem Skript halten und es wie so importieren:

use lib './lib'; # where ./lib is replaced with wherever the module actually is. 
use MyModule; 
5

noch einen anderen Vorschlag, ein Modul zu verwenden.

Module sind nicht schwer zu schreiben oder zu verwenden. Sie scheinen nur hart zu sein, bis Sie einen schreiben. Nach dem ersten Mal wird es einfach sein. Viele, viele gute Dinge kommen von der Verwendung von Modulen - Kapselung, einfache Prüfung und einfache Wiederverwendung von Code, um nur einige zu nennen.

Siehe my answer to a similar question für ein Beispielmodul mit exportierten Funktionen.

Auch some very smart people in der Perl-Community wie Module so viel, dass they advocate writing apps as modules - they call them modulinos. Die Technik funktioniert gut.

Also, abschließend, versuchen, ein Modul schreiben heute!

Verwandte Themen