2010-12-06 15 views
12

Mis scripts se vuelven demasiado largos. ¿Cómo puedo dividir mi código (subs procedimientos) en múltiples archivos Perl y decirle al intérprete que les dé sentido?¿Cómo puedo dividir mi código Perl en varios archivos?

Algo así como:

# -> main.pl 

#include "foo.pl" 
say_hello(); 

y:

# -> foo.pl 
sub say_hello {print "hello!"} 

Respuesta

18

Lo que quiere hacer es crear uno o más módulos. Comience por mirar perlmod, especialmente el Perl Modules section.

Como dices que estás escribiendo código de procedimiento, querrás exportar funciones de tus módulos. La forma tradicional de hacerlo es usar Exporter (que viene con Perl), aunque Sub::Exporter es un módulo de CPAN más nuevo que permite algunas cosas agradables. (Consulte también su Sub::Exporter::Tutorial para una introducción a las funciones de exportación.)

Los módulos se pueden colocar en cualquiera de los directorios enumerados en la variable @INC. Pruebe perl -V para obtener una lista. También puede usar lib para agregar directorios en tiempo de ejecución. Un truco es usar el módulo FindBin para encontrar la ubicación de su script, y luego añadir un directorio relativo a que:

use FindBin;     # Suppose my script is /home/foo/bin/main.pl 
use lib "$FindBin::Bin/lib"; # Add /home/foo/bin/lib to search path 

Su código de ejemplo, se convierte en un módulo:
En main.pl:

#! /usr/bin/perl 
use strict; 
use warnings; 
use Foo; 
say_hello(); 

En Foo.pm:

package Foo; 

use strict; 
use warnings; 
use Exporter 'import'; 
our $VERSION = '1.00'; 
our @EXPORT = qw(say_hello); 

sub say_hello {print "hello!"} 
2

Creo que puede estar buscando do? http://perldoc.perl.org/functions/do.html

+3

'do' no ayuda con guiones de división en varios archivos. – reinierpost

+2

@reinierpost Eso es lo que piensas: simplemente no has logrado el nirvana de Perl. ;) –

+1

Esta respuesta es válida. 'do 'xyz.pl'' o' require' xyz.pl'' se puede usar para incluir otros scripts (y cualquier subrutina en esos scripts se puede llamar a voluntad) - muy simple. Pruébalo antes de golpearlo! – QuasarDonkey

0

póngalo en la misma carpeta que su clase y agregue use ClassName a la parte superior del archivo de llamada.

También consulte el tutorial Perl OOP.

Cuestiones relacionadas