2012-11-15 10 views
6

Gli script perl contengono tutti i nomi dei moduli all'inizio dello script.Come includere un file che contiene tutti i nomi dei moduli Perl richiesti?

Es:

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; 

come mantenere tutti i nomi di modulo in un altro file e includere il file in script perl principale?

Grazie.

+0

Precedentemente: http://stackoverflow.com/questions/437785/is-there-a---a-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-with-modern-perl-utf8-default – daxim

risposta

6

Crea il tuo modulo. Ma, se si crea un pacchetto in questo modulo, quelli strftime verranno importati in un altro spazio dei nomi. Si può fare mod litle per fare questo smiple:

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; 

Nota non c'era package parola chiave in questo .pm. Lo script:

use MyModules; 

Luogo questo .pm nella stessa directory con script o aggiungere moduli percorso di ricerca in fase di esecuzione:

use lib '/my_modules_dir/'; 
use MyModules; 

L'utilizzo di fare e richiedono comandi non è consigliato, in quanto non controllare la sintassi all'avvio dello script. Certo è possibile collocarli in blocco BEGIN, ma penso che il suo modo ingannevole e, in generale BEGIN{ require ..} è lo stesso di use

UPD: Ikegami problema notato la sua non funziona quando si utilizza questo da molti moduli. Indipendentemente dalle informazioni introduttive di una domanda (vuole usarlo dalla sceneggiatura principale), aggiungere informazioni su come usarlo da molti moduli, in modo che il mio amico possa sentirsi meglio. Aggiungi alla fine di MyModules.pm:

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

In realtà 'use' quando il file non contiene il pacchetto termina con' do' in 'BEGIN' in ogni caso. La differenza che 'use' farà i controlli per te. E, come nel caso della risposta di Choroba, modificherete i commenti/catturerete i bug con una cosa così semplice come il comando 'do'. – PSIAlt

+0

@ikegami yes, ** use ** risulterà ** require ** che di per sé chiamerà ** do ** dopo aver controllato che il modulo non sia già stato caricato. E lui vuole includere dalla sceneggiatura principale. – PSIAlt

+0

@ikegami tutto per te, il mio miglior amico StackOverflow. – PSIAlt

7

È possibile utilizzare

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

Vedi do. Assicurati di includere 1; nella parte inferiore del file.

+1

Non si accende in modo restrittivo, ma gestirà l'esportatore. – ikegami

3

Si potrebbe guardare il modulo Toolkit.

Problemi correlati