2009-12-08 20 views
9

Tengo una secuencia de comandos de Perl que se está volviendo grande, así que quiero dividirla en varias secuencias de comandos. es decir, quiero sacar algunas grandes declaraciones hash y ponerlas en otro archivo. ¿Cómo consigo que el script original pueda ver y usar las variables que ahora se declaran en el otro script?¿Cómo puedo obtener una secuencia de comandos Perl para ver las variables en otra secuencia de comandos de Perl?

Esto me está volviendo loco porque no he utilizado Perl desde hace tiempo y para la vida de mí no puede resolver esto

Respuesta

15

uso de un módulo:

package Literature; 

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

1; 

Por ejemplo:

#! /usr/bin/perl 

use Literature; 

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

Salida:

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

Argumentaría que Bert era el compañero de Ernie, pero por lo demás un buen ejemplo. –

+4

Con un poco de magia Exporter podríamos incluso 'usar Literature qw (Sidekicks);' y no tener que usar el nombre completo del paquete. Haría el paquete más complejo, pero valdrá la pena al final. –

+0

¡No olvides el 1! ¡Es importante! Sé que lo tienes gbacon, pero es uno que muerde a la gente. –

10

Se utiliza modules. O modulinos.

Hazlo un módulo que exporta (¡opcionalmente!) Algunas variables o funciones. Consulte cómo usar el módulo Exporter.

+0

vi eso, pero podría jurar que había una manera más fácil. Puede que me esté volviendo loco al final de un largo día ... – John

+8

@john: sí, hay otras formas, pero violan las mejores prácticas y por lo tanto no se divulgarán aquí. – Ether

+0

Es la forma más sostenible y la mejor manera en el largo plazo. Si es necesario, puede usar la función 'do' para ejecutar otro script Perl, de modo que pueda poner todas las declaraciones de variables en" myvars.pl "y luego' do "myvars.pl" ', pero si lo hace, está llegando al punto en que deberías estar usando un módulo. –

4

Como una adición a los otros "utilizar un módulo de" sugerencias, si va Al reutilizar mucho el módulo, deseará instalarlo en la biblioteca de su sitio (generalmente en ...(perl install folder)...\site\lib.

Si no es así (tal vez la reutilización, se ha limitado fuera del guión), se puede mantener en el directorio con la secuencia de comandos y la importación de este modo:

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

Otra sugerencia de utilizar un módulo.

Los módulos no son difíciles de escribir o usar. Simplemente parecen difíciles hasta que escribas uno. Después de la primera vez, será fácil. Muchas, muchas cosas buenas vienen del uso de módulos: encapsulación, facilidad de prueba y fácil reutilización del código, por nombrar algunos.

Consulte my answer to a similar question para obtener un módulo de ejemplo, con funciones exportadas.

También, some very smart people en la comunidad de Perl como módulos tanto que they advocate writing apps as modules - they call them modulinos. La técnica funciona bien.

Por lo tanto, en conclusión, intente escribir un módulo hoy!

Cuestiones relacionadas