You are on page 1of 32

PERL

Sanchez Yanque Robin Tacuri Sikos Giraldo

INTRODUCCION

Perl es un acrnimo de Practical Extracting and Reporting Languaje, que viene a indicar que se trata de un lenguaje de programacin muy prctico para extraer informacin de archivos de texto y generar informes a partir del contendido de los ficheros. Perl est inspirado a partir de lenguajes como C, sh, awk y sed (algunos provenientes de los sistemas Unx), pero est enfocado a ser ms prctico y fcil que estos ltimos. No establece ninguna filosofa de programacin concreta.

HISTORIA

Larry Wall comenz a trabajar en Perl en 1987 mientras trabajaba como programador en Unisys1 y anunci la versin 1.0 . Perl 2, publicado en 1988, aport un mejor motor de expresiones regulares. Perl 3, publicado en 1989, aadi soporte para datos binarios. En 1991 se public Programming Perl (el libro del camello), Perl salt a 4, no por marcar un gran cambio en el lenguaje sino por identificar a la versin que estaba documentada en el libro. Perl 4 trajo consigo una serie de lanzamientos de mantenimiento, culminando en Perl 4.036 en 1993.

HISTORIA

Perl 5 fue publicado el 17 de octubre de 1994. Fue casi una completa reescritura del intrprete y aadi muchas nuevas caractersticas al lenguaje, incluyendo objetos, referencias, paquetes y mdulos. En 2008, Perl 5 continua siendo mantenido. incluyendo soporte Unicode, Hilos (threads), un soporte importante para la programacin orientada a objetos. Perl v6 lanzado en marzo del 2010 y hoy existen mltiples proyectos de implementacin de Perl 6 tales como Rakudo Perl, Rakudo Start. La publicacin ms reciente de Rakudo Star fue el 28 de enero de 2012.

CARACTERISTICAS
Multiparadigma(funcional, imperativa, orientado a objetos) Tipo de dato dinmico. Multiplataforma Licencia GPL. Tiene incorporado un poderoso sistema de procesamiento de texto y una enorme coleccin de mdulos disponibles. Perl es un lenguaje de programacin interpretado. Es un lenguaje case-sensitive, lo cual hace referencia a la propiedad de un texto para presentarse en maysculas o en minsculas. Lenguaje que trabaja en el lado del servidor.

ABSTRACCION
Cada

objeto en el sistema sirve como modelo de un agente abstracto que puede realizar trabajo, informar y cambiar su estado, y comunicarse con otros objetos en el sistema sin revelar cmo se implementan estas caractersticas.

CLASES Y OBJETOS
En Perl la terminologa de Object-Oriented (OO) programming se aplica de la siguiente manera:

Un objeto es una variable que pertenece a una clase. Mtodos son funciones asociadas a objetos o clases. Propiedades de instancia son propiedades que afectan slo al objeto. Propiedades de clase son propiedades que afectan a todos los objetos de la clase. Una clase es un Package, y normalmente un mdulo, o sea un archivo .pm. El objeto (o variable) es una referencia a la que se le ha aplicado la funcin bless.

UN OBJETO EN PERL
Normalmente se crea un objeto a travs de una funcin llamada new ( ) # Crear el objeto sub new { my $class = shift; return bless {}, $class; } Podemos llamar a new de dos formas: my $object = Some::Class->new(); o bien: my $object = new Some::Class;

Lo primero, para construir nuestra propia clase, ser darle un nombre. Dicho nombre tambin ser el nombre del fichero (ms la extensin .pm -de perl module-) donde tendremos la clase. Despus tendremos que empezar la clase con: Encabezado de la clase Persona (fichero Persona.pm)

la primera lnea, sirve para indicar, que es una clase lo que estamos creando, y la segunda lnea nos dice que tenemos que ser estrictos a la hora de programar, es decir, que hay que declarar las variables antes de usarlas, como en casi todos los

Despus tenemos que programar el constructor, que podemos llamar como nos apetezca, pero por convencin se utiliza el nombre new. En el constructor, primero miramos la clase que es,

En el anterior trozo de cdigo para averiguar la clase a la que pertenezco, se mira si es o no una referencia lo que se pasa. Esto es para que el constructor pueda ser llamado como un mtodo de clase (como parmetro tiene el tipo de referencia que recibe) o como un mtodo de objeto (como primer parmetro recibe el objeto).

Una vez que sabemos la clase que estamos construyendo, declaramos las propiedades (variables de instancia) de la clase,

En el cdigo anterior , estamos usando una referencia (de ah la notacin con -> ) a un array asociativo. De esta forma podremos darle nombres a las propiedades del objeto. Tambin podramos haber usado una referencia a un array indexado (con $self=[];), pero la forma de acceder a las propiedades sera mediante ndices:

Una vez averiguada la clase que somos y declaradas las variables de instancia, Perl no tiene que dar el visto bueno a la clase (bendecirla) y al final, del constructor, devolvemos la clase creada.

Tambin podramos haber bendecido slo el objeto en s (bless $self;), pero si lo hacemos as no sabremos a que clase pertenece y no se podr heredar de l. De esta forma el constructor nos queda como sigue:

Tambin tendremos que construir nuestros mtodos para la clase. Para ello slo tenemos que tener en cuenta que un mtodo de una clase es simplemente una funcin (o subrutina) que toma como primer parmetro el tipo de clase a la que pertenece el mtodo. Podemos hacer el destructor (no obligatorio), que es un mtodo, anlogo a los anteriores, pero con la nica diferencia en que se debe llamar DESTROY o END Para terminar ponemos un 1; esto es as para que Perl pueda interpretar la clase de forma independiente y con esto no hace nada, es "slo" un script que devuelve 1.

ENCAPSULAMIENTO

El encapsulamiento impide que se pueda tener acceso a mtodos o atributos de la clase por fuera de esta, sea, en la declaracin de los objetos en si, solamente seran utilizables dentro dela misma clase. La encapsulacin da lugar a que las clases se dividan en dos partes:

Interface: Captura la visin externa de una clase, abarcando la abstraccin del comportamiento comn a los ejemplos de esa clase. Implementacin: Comprende la representacin de la abstraccin,as como los mecanismos que conducen al comportamiento deseado.

INTERFACES EN PERL

MODULARIDAD

Un mdulo de Perl es un mecanismo para usar bibliotecas de cdigo externas a un programa Perl, permitiendo que un simple archivo contenga rutinas comunes a varios programas. Para usar mdulos en Perl, tambin se pueden utilizar las sentencias do y require adems de use., las diferencias son: do $nombreFichero lee el contenido de $nombreFichero en tiempo de ejecucin. require $nombreFichero funciona de forma similar a do $nombreFichero excepto que comprueba antes si se ha leido el contenido del mdulo $nombreFichero. Si se ha leido, no lo vuelve a leer. use Modulo funciona de forma similar a require Modulo excepto que lo hace en tiempo de compilacin, en lugar de tiempo de ejecucin por lo que la ejecucin del script es ms rpida.

MODULARIDAD

use Modulo;

use Modulo::ModuloChico;

Con esta directiva le estamos diciendo a perl que queremos usar un mdulo que se llama "Modulo", entonces lo que va a hacer perl es leer varios directorios, estos directorios se encuentran en un array que se llama @INC y son los directorios que tiene perl reconocidos como libreras. Al hacer esto le estamos diciendo que queremos que busque el "ModuloChico" dentro de un directorio llamado "Modulo" que debe de encontrarse en algn directorio de @INC.

EJEMPLO
Programa programa.pl: #!/usr/bin/perl use strict; use Ucema; use Uade; my $promedio = 7; print 'Mi promedio: ', $promedio, "\n";

La linea use Ucema; busca el archivo de nombre Ucema con extensin .pm, y luego importa Ucema con todos los subrutinas y variables pblicas que tenga este mdulo.

Para

realizar la herencia, tan slo tenemos que aadir al array @ISA una lista de antecesores (si solo hay uno ser herencia simple y si hay ms es herencia mltiple). Cuando el intrprete de Perl no encuentre un mtodo en la clase, buscar dicho mtodo en la primera clase de la que hereda, despus en la segunda, etc.

HERENCIA MULTIPLE

Perl admite que una clase tenga dos o ms superclases. La forma en que funciona es simple: hay que poner ms de un nombre de paquete en el array @ISA. Cuando llega el momento en que Perl busque los mtodos para un objeto, busca en cada uno de estos paquetes en orden de primer nivel de profundidad con recursividad completa.

@Primero::ISA = qw( Alpha ); #Primero hereda de Alpha @Segundo::ISA = qw( Beta ); #Segundo hereda de Beta @Tercero::ISA = qw( Primero Segundo); #Tercero hereda de # Primero y de Segundo

POLIMORFISMO
Es

la capacidad de objetos de clases distintas, relacionados mediante la herencia, a responder de forma diferente a una misma llamada de funcin miembro. Para que una subclase utilice un mtodo del mismo nombre y argumentos que el definido en la superclase pero con una funcionalidad diferente (polimorfismo), tan slo hay que redefinirlo en el cuerpo de la subclase.

package Persona; use strict; sub new { my $self = {}; $self->{NOMBRE} = undef; $self->{EDAD} = undef; $self->{AMIGOS} = []; bless($self); $ lf return $self; } sub nombre { my $self = shift; if (@_) { $self->{NOMBRE} = shift } return $self->{NOMBRE}; } sub edad { my $self = shift; if (@_) { $self->{EDAD} = shift } return $self->{EDAD}; } sub amigos { my $self = shift; if (@_) { @{ $self->{AMIGOS} } = @_ } return @{ $self->{AMIGOS} }; } 1;

package Empleado; use Persona; @ISA = ("Persona"); amigos(), definido sub salaria { en Persona, se my $self = shift; if (@_) { $self->{SALARIO} = shift } redefine (o return $self->{SALARIO}; sobrecarga) en la } clase derivada de sub id_nombre { my $self = shift; Persona, Empleado. if (@_) { $self->{ID} = shift } return $self->{ID}; } sub meter_datos { my $self = shift; if (@_) { $self->{METER_DATOS} = shift } return $self->{METER_DATOS}; } sub amigos { my $self = shift; if (@_) { @{ $self->{AMIGOS} } = @_ } return map { "PEON=\U$_" } @{ $self>{AMIGOS} }; } 1;

ENVIO DE MENSAJES

paso de mensajes es el proceso mediante el cual un objeto enva datos a otro objeto o le pide al otro objeto para invocar un mtodo. Cuando se invoca un mtodo en un objeto, el objeto en s determina qu cdigo se ejecuta buscando el mtodo en tiempo de ejecucin en una tabla asociada con el objeto (necesaria cuando varias clases contienen diferentes implementaciones del mismo mtodo).

ENVIO DE MENSAJES
package Coches; use strict; sub new { my $Coche = 4; bless \$Coche; return \$Coche; } sub ver_puertas { my $coche = shift; print $$coche; } sub poner_puertas { my $coche = shift; $$coche = shift; } package main; use strict; my $auto = Coches ->new(); $auto->ver_puertas; $auto->poner_puertas(2); $auto->ver_puertas;

CONCURRENCIA

Perl proporciona para la construccin de programas concurrentes el modulo Thread, que permite ejecutar hilos de ejecucin independiente. la programacin de hilos, ha estado disponible utilizando un modelo denominado temas de interpretacin que proporciona un intrprete de Perl nueva para cada hilo, y, por defecto, da lugar a un dato o informacin sobre el estado que se comparte entre los hilos. Esta disponible a travs de la Thread.pm API de perl.

CONCURRENCIA
#!/usr/bin/perl $pid = fork(); if ($pid == 0) { print "Soy el proceso hijo\n"; } else { print "Soy el proceso padre\n"; } print "Fork devolvi: $pid\n";

CONCURRENCIA
#!/usr/local/roadm/bin/perl # This is compiled with threading support use strict; use warnings; use threads; use threads::shared; print "Starting main program\n";
Starting main program started thread 1 started thread 2 started thread 3 started thread 4 started thread 5 started thread 6 started thread 7 started thread 8 started thread 9 started thread 10 done with thread 1 done with 1 done with thread 2 done with 2 done with thread 3 done with 3 done with thread 4 done with 4 done with thread 5 done with 5 done with thread 6 done with 6 done with thread 7 done with 7 done with thread 8 done with 8 done with thread 9 done with 9 done with thread 10 done with 10 End of main program

my @threads; for ( my $count = 1; $count <= 10; $count++) { my $t = threads->new(\&sub1, $count); push(@threads,$t); } foreach (@threads) { my $num = $_->join; print "done with $num\n"; } print "End of main program\n";
sub sub1 { my $num = shift; print "started thread $num\n"; sleep $num; print "done with thread $num\n"; return $num; }

PERSISTENCIA

Nos fijamos en tres mdulos, FreezeThaw, Data::Dumper, y Storable. Todos ellos serializan estructuras de datos de Perl en cadenas ASCII o binario, slo Storable en realidad los escribe en el disco. Los otros dos mdulos son importantes porque se puede usar en conjuncin con otros mecanismos de persistencia, tales como bases de datos y archivos de DBM. La librera DBI (Data Base Interface). Con el DBI de Perl, podremos acceder a cualquier base de datos (al ser independiente de la base de datos con la que se est trabajando)

PERSISTENCIA
use DBI; my $host="servidor"; #Servidor donde se aloja la base de datos my $base_datos="basedatos"; #Nombre de las base de datos my $usuario="basedatos"; #Usuario de la BDmy $clave="password"; #Password de la BDmy $driver="mysql"; #Utilizamos el driver de mysql #Conectamos con la BD. Si no podemos, mostramos un mensaje de error my $dbh = DBI-> connect ("dbi:$driver:database=$base_datos;host=$host", $usuario, $clave)|| die "\nError al abrir la base datos: $DBI::errstr\n";

CONCLUSIONES

Perl es un lenguaje libre que solo requiere de un editor de texto y un intrprete, el cual es fcil de instalar y de obtener, debido a que es un lenguaje no privativo. Perl al ser un lenguaje script, lo cual implica que no requiere de un compilador y no se genera un cdigo objeto, sino que se va interpretando lnea por lnea. Esto ofrece la funcionalidad de portabilidad. El lenguaje Perl tiene cierta facilidad para la implementacin de aplicaciones Web por que hay funcionalidades aadidas a Perl para el manejo de programacin en red. Perl no brinda fcil uso de las expresiones regulares, las cuales son muy utilizadas por los desarrolladores para validar pginas web a nivel de formularios y envo de peticiones HTTP GET

BIBLIOGRAFIA

Prellezo, J. Perl 5.0: Un Lenguaje Multiuso, http://www.openeslack.org/mans/programm/perl/perl.pdf Versin 1.6, Octubre, 2002. Perl, Wikipedia: la enciclopedia libre, http://es.wikipedia.org/wiki/Perl, Enero, 2006 Perl : Introduccin, Universidad de Las Palmas de Gran Canaria http://www.ulpgc.es/otros/tutoriales/perl/cap1.htm Introduccion, Espaa, Enero, 2003 Tutorial de Perl, Flanagan, URL: http://flanagan.ugr.es/perl/. Tutorial de Perl, http://perl-begin.org/topics/modules-andpackages/ Modelo objetual en perl, Luis Gallego Gmez,2007 http://zarza.usal.es/~fgarcia/docencia/poo/0102/trabajos/S2T6.pdf El Evangelio de Perl. http://epq.com.co/~cjara/perl/tutorial.htm

You might also like