2012-11-15 5 views
6

Die Perl-Skripte enthalten alle Modulnamen am Anfang des Skripts.Wie wird eine Datei eingefügt, die alle erforderlichen Perl-Modulnamen enthält?

Ex:

use strict; 
use XML::Parser; 
use XML::Simple; 
use DBI; 
use DBD::DB2::Constants; 
use POSIX qw(strftime); 
use Storable qw(dclone); 
use Data::Dumper; 
use Carp; 

Wie alle Namen des Moduls in einer anderen Datei halten und schließen die Datei in Haupt-Perl-Skript?

Danke.

+0

Bisher: http://stackoverflow.com/questions/437785/is-there-a-way-to-use-a-single-file-that-in-turn-uses-multiple-others-in-perl http://stackoverflow.com/questions/4919625/perl-how-to-share-the-import-of-a-large-list-of-modules-between-many-independen http://stackoverflow.com/questions/6412799/perl-how-to-make-use-mydefaults-mit-modern-perl-utf8-defaults – daxim

Antwort

6

Erstellen Sie Ihr eigenes Modul. Aber, wenn Sie ein Paket in diesem Modul machen, werden diese strftime usw. in einen anderen Namensraum importiert. Sie können litle Hack tun, um diese smiple zu tun:

MyModules.pm:

use strict; 
use XML::Parser; 
use XML::Simple; 
use DBI; 
use DBD::DB2::Constants; 
use POSIX qw(strftime); 
use Storable qw(dclone); 
use Data::Dumper; 
use Carp; 

Hinweis gibt es in diesem .pm kein package Schlüsselwort war. Ihr Skript:

use MyModules; 

Dieses .pm in demselben Verzeichnis mit Skript oder Module zur Laufzeit-Suchpfad hinzufügen:

use lib '/my_modules_dir/'; 
use MyModules; 

Verwendung von tun und erfordern Befehle wird nicht empfohlen, da sie Überprüfe die Syntax beim Start des Skripts nicht. Sicher, Sie können sie setzen in Block beginnen, aber ich denke, seine schwierige Art und Weise und in der Regel BEGIN{ require ..} ist die gleiche wie use

UPD: ikegami erwähnte Problem seine nicht funktioniert, wenn Sie diese verwenden, um von vielen Modulen. Unabhängig von der Frage des Starters (er möchte dies aus dem Hauptskript verwenden), füge ich Informationen dazu hinzu, wie man dieses aus vielen Modulen benutzt, damit sich mein Freund besser fühlen kann. Zum Ende von MyModules.pm hinzufügen:

delete $INC{'MyModules.pm'}; 
1; 
+1

Eigentlich 'use', wenn Datei nicht Paket enthält, endet mit' do' in 'BEGIN' trotzdem. Der Unterschied, dass "verwenden" die Überprüfungen für Sie durchführt. Und, wie im Fall von chorobas Antwort, werden Sie Kommentar bearbeiten/die Fehler mit so einfachen Dingen wie 'do' befehlen. – PSIAlt

+0

@ikegami yes, ** usage ** wird das Ergebnis ** require ** ergeben, das selbst ** do ** aufrufen wird, nachdem überprüft wurde, dass das Modul noch nicht geladen ist. Und er möchte aus dem Hauptskript aufnehmen. – PSIAlt

+0

@ikegami alles für dich, mein bester Stackoverflow Freund. – PSIAlt

7

können Sie verwenden

BEGIN { do 'filename.pl' or die [email protected] } 

do See. Stellen Sie sicher, dass Sie 1; am Ende der Datei enthalten.

+1

Es wird nicht streng einschalten, aber es wird mit dem Exporteur umgehen. – ikegami

3

Sie könnten sich das Modul Toolkit ansehen.