Sunteți pe pagina 1din 22

guia perl

PDF generado usando el kit de herramientas de fuente abierta mwlib. Ver http://code.pediapress.com/ para mayor informacin. PDF generated at: Thu, 10 May 2012 17:18:36 UTC

Contenidos
Artculos
Programacin en Perl Introduccin Fundamentos Tu primer programa Tipos de datos Estructuras de control Subrutinas Expresiones regulares Funciones 1 2 4 5 7 10 13 14 15

Referencias
Fuentes y contribuyentes del artculo Fuentes de imagen, Licencias y contribuyentes 18 19

Licencias de artculos
Licencia 20

Programacin en Perl

Programacin en Perl

Programacin en Perl
Estado del libro: Bajo desarrollo:

Objetivos
Aprender el manejo del lenguaje Perl para programar, abarcando desde lo bsico hasta lo avanzado. Introduccin - "Conceme un poco mas" Seccin 1 FUNDAMENTOS Conceptos Bsicos 1. 2. 3. 4. 5. Tu primer programa - "El clsico Hola mundo" Tipos de datos - "Que datos manejo" Estructuras de control - "S controlar" Subrutinas - "Fragmento con subprogramas" Expresiones regulares (regex) - "Soy regularmente expresivo" 6. Funciones - "A que soy matemtico!" Seccin 2 USOS PRCTICOS Conceptos Intermedios 1. Manejo de archivos - "Archivando datos" 2. Mdulos - "Se manejar mdulos" Seccin X ANEXOS 1. Herramientas - "Hay muchas herramientas tiles" 2. Referencias - "Puedes buscar mucha, mucha, mucha ms informacin aqu" 3. Colaboradores - "Este wikilibro es posible gracias a..."

Desarrollo y coordinacin
Este libro se encuentra en incubacin. Para mayor informacin contactar con oleinad en su pgina de discusin.

Referencias
Perl Wikipedia:espaol Perl Wikipedia:ingles [1] Apuntes de Perl en espaol

Referencias
[1] http:/ / nereida. deioc. ull. es/ ~lhp/ perlexamples

Introduccin

Introduccin
Introduccin a Perl
Perl es un lenguaje de programacin, estrictamente hablando es un lenguaje de interpretacin de guiones, esto quiere decir que no necesita compilacin previa para ejecutar el programa realizado. Fue creado para procesar texto y producir reportes. Por ello se ha tomado de "Perl" el retroacrnimo de: Practical Extraction and Report Language en espaol Lenguaje Prctico de Extraccin y Reporte. Se desarroll originalmente pensando en el sistema operativo (SO) UNIX aunque se encuentra disponible para otros, junto con los ms populares. Es muy usado en tareas de administracin de sistemas. Notas Wikipedia us Perl hasta Enero de 2002. El cdigo an esta disponible en http://usemod.com . En la wikipedia sobre Perl se menciona lo siguiente: Perl es un lenguaje de propsito general originalmente desarrollado para la manipulacin de texto y que ahora es utilizado para un amplio rango de tareas incluyendo administracin de sistemas, desarrollo web, programacin en red, desarrollo de GUI y ms. Se previ que fuera prctico (facilidad de uso, eficiente, completo) en lugar de hermoso (pequeo, elegante, mnimo). Sus principales caractersticas son que es fcil de usar, soporta tanto la programacin estructurada como la programacin orientada a objetos y la programacin funcional, tiene incorporado un poderoso sistema de procesamiento de texto y una enorme coleccin de mdulos disponibles en CPAN.

Aprender Perl
Es ms fcil de lo que se supone, de hecho aprender a programar es muy fcil y rpido. Aprender a programar es ms sencillo cuando se cumplen ciertas reglas o pre-requisitos. Los procedimientos en la programacin son siempre los mismos, lo nico que cambia es el cdigo.

Requerimientos
Por lo tanto para realizar cualquier programa en cualquier lenguaje requerimos: Tener una visin general del programa mismo. Conocer el cdigo que maneja el lenguaje en que se realizar el programa (objetivo primordial de este wikilibro). En el caso de Perl, tmbien se requiere: Un editor de texto simple. Actualmente hay editores avanzados diseados especialmente para editar bajo este lenguaje de programacin (Ver Anexos). El interprete de Perl instalado en tu ordenador. Es posible usar Perl como una aplicacin para internet, pero requieres: Un servidor. Si apenas estas iniciando a aprender este lenguaje es recomendable realizar pruebas, ejemplos y practicas fuera de la red para no difundir datos de tu servidor (que pueden ser mal usados por malintencionados), por lo que es muy recomendable que instales una aplicacin en tu ordenador para que funcione como servidor local para realizar pruebas. Y por lo tanto que este servidor tenga instalado el intrprete de Perl y que el servidor este configurado para dar servicio a este tipo de programas. Ver Anexos Herramientas para ejemplo de aplicaciones que puedes usar.

Introduccin

Acerca del wikilibro


Lector que estas apunto de aprender un fascinante y sencillo lenguaje de programacin, este wikilibro esta estructurado de tal manera que puedas ver a primera vista las funciones y conceptos nuevos de cada captulo. Conforme se desarrolle el captulo encontrars varios ejemplos y al final de cada captulo se listarn algunos ejercicios, algunos resueltos y algunos otros no!, con la finalidad que los desarrolles y pongas en prctica los conocimientos nuevos.

Autores
Los autores y colaboradores que ayudan en el desarrollo, correccin y actualizacin de este wikilibro se mencionan en la seccin de Anexos Colaboradores.

Dudas
Seguramente conforme vayas leyendo este wikilibro se generen dudas, por lo que te recomiendo primero leer completamente el wikilibro, si despus de esto siguen las dudas por favor, escribirlas aqu, y con tus preguntas ayudars a formar un listado de preguntas frecuentes(FAQ).

Barra de navegacin
Al inicio y final de cada pagina(captulo) encontrars una barra de navegacin como la que se encuentra abajo, para que contines leyendo el wikilibro. En donde el enlace a la derecha te lleva al siguiente tema del wikilibro. Nota: Originalmente esta barra de navegacin es una plantilla que fue desarrollada para este wikilibro.

Recuadros
Este wikilibro incorpora unos recuadros del lado derecho, como se muestra al inicio de esta pagina, que contendr informacin a modo de resumen del contenido de la pagina en cuestin, con la finalidad de facilitar la referencia del contenido de este wikilibro. Nota: La plantilla de estos recuadros fue desarrollada originalmente para este wikilibro.

Nota para los Desesperados


Si realmente quieres aprender, le con calma este wikilibro, seguramente el cdigo estar estructurado de tal manera que puedas copiar y pegar, sin embargo lee cuidadosamente la descripcin del cdigo, ya que en ocasiones hay que agregar y/o corregir algunas cosas, segn el uso que se le d al cdigo. "Dale tiempo a tu cerebro de asimilar y entender la informacin."

Fundamentos

Fundamentos
Seccin 1

Programacin en Perl

Fundamentos
En esta seccin encontraras los conocimientos bsicos sobre el lenguaje Perl. Aprenders: Los tipos de datos que usa Perl, como interpretarlos y como manejarlos. las estructuras de control, a subdividir un programa, las prcticas funciones que realiza Perl y una introduccin al manejo de expresiones regulares.

Las expresiones regulares, son una de las grandes caracteristicas de este lenguaje. "Una expresin regular, a menudo llamada tambin patrn, es una expresin que describe un conjunto de cadenas..." [wikipedia] En esta seccin hay una introduccin a este tema, en la siguiente seccin se abordar nuevamente este tema, pero con algo ms avanzado, por lo que es recomendable asimilar el tema de esta seccin.

Tu primer programa

Tu primer programa
Tu primer programa en Perl
En Perl, el programa cannico "Hola mundo" es: #!/usr/bin/perl print "Hola mundo!\n"; # "\n" es un 'nueva lnea' # Asi de sencillo. La primera lnea contiene el shebang (par de caracteres que identifica el texto que sigue), que le indica al sistema operativo dnde encontrar el intrprete de Perl. La segunda imprime el string Hola mundo! y un carcter de nueva lnea, seguido por ; que representa en final de la lnea de cdigo y finalmente sigue un comentario. La tercera lnea es un comentario. El signo # en la segunda y tercera lnea es un 'token comentario', que permite al intrprete perl ignorar todo lo que le siga, hasta el final de la lnea de texto. El shebang es la forma normal para invocar al intrprete en los sistemas Unix. Los sistemas Windows pueden seguir utilizndolo o pueden asociar la extensin de archivo .pl con el intrprete Perl. Algunos editores de texto tambin usan la lnea shebang como una pista sobre el modo de trabajo en que deben operar. Si el programa es ejecutado por perl y no invocado por el shell, la lnea que empieza por el shebang es parseada para interpretar las opciones. En otro caso, es ignorada. Para ver los detalles de esto, consultar la pgina de manual perlrun [1].

Lo mismo pero ms despacio


Esto es un programa muy simple escrito en Perl. #!/usr/bin/perl print "Hola mundo!\n"; # "\n" es un 'nueva lnea' # Asi de sencillo. Lo que verias en tu pantalla sera: Hola Mundo! Veamos que hace lnea a lnea #!/usr/bin/perl Le dice al sistema operativo que lenguaje usar, en este caso perl (Importante: esto solo aplica en los sistemas operativos basados en UNIX). print "Hola Mundo!\n"; # "\n" es un 'nueva lnea' La instruccin (o funcin) print imprime en pantalla (en el monitor), por lo que Perl interpreta esto y muestra en la pantalla Hola Mundo!. El texto despus de # es ignorado. Toda instruccin en Perl termina con un "punto y coma" (hay contadas excepciones), es decir, despus de colocar la instruccin y el contenido de la instruccin, se debe colocar un ; (es extrictamente necesario), con esto le indicas a Perl que hasta ah finaliza la instruccin. Por lo que en una lnea de texto puedes colocar varias instrucciones siempre y cuando finalize cada instruccin con un ; ("punto y coma"). # Asi de sencillo.

Tu primer programa Todo el texto seguido por '#' una 'almoadilla' sera ignorado por le interprete Perl(excepto en la primera lnea del archivo). Para practicar podras intentar lo siguiente Realiza un programa que muestre en pantalla "Hoy hice mi primer programa en Perl". RECUERDA: Si aades otra instruccin (como otro print) AADE un puntocoma ; al final. Este ser el 99% de las veces, la causa probable del por que tus primeros programas no funcionarn.

Sobre print
print es un instruccin de Perl y se conoce como funcin de Perl. Para mas detalles sobre las funciones puedes consultar en la seccin de Anexos la lista de funciones, para print consulta funcin print.

Tu primer programa en Perl como CGI


Perl fue uno de los lenguajes inicialmente usados para realizar CGI's en Servidores Web por lo que es este apartado se describe como usar Tu primer programa en Perl como CGI con solo agregarle una lnea a tu programa. La lnea que se agregara es esta print "Content-type:text/html"."\n\n"; con esto le indicas a Perl que la impresin ser en el "Navegador" de internet en lugar de la pantalla de tu monitor. Quedando as el script: #!/usr/bin/perl print "Content-type:text/html"."\n\n"; print "Hola Mundo!\n"; En donde el simbolo . (punto) une ambas cadena de texto dentro de la sentencia print y las dos nuevas lneas (\n\n) son estrictamente necesarias para que el servidor sepa como tratar los datos que enviar al Navegador del cliente.

Ejercicios
Ejercicios para practicar, podras intentar estas cosas: 1 - Que el programa te diga Hola, Buen da Estas son... mis primeras lneas en Perl 2 - Prueba a poner \n (equivalente a un ENTER de teclado) en ms sitios dentro de las comillas dobles, a ver que pasa!. 3 - En los ejercicios anteriores, prueba las comillas simples en vez de las dobles "".

Tu primer programa

Referencias
[1] http:/ / perldoc. perl. org/ perlrun. html#DESCRIPTION

Tipos de datos
Tipos de datos
Perl tiene tres tipos de datos: escalares, listas y hashes (listas asociadas): Un escalar es un solo valor; puede ser un nmero, un string (cadena de caracteres) o una referencia Una lista es una coleccin de escalares (una variable que almacena una lista se llama array) Un hash, o memoria asociativa, es un mapeo de strings a escalares; los strings se llaman claves y los escalares valores. Todas las variables estn precedidas por un sigil, que identifica el tipo de dato que es accedido (no el tipo de dato de la misma variable). Se puede usar el mismo nombre para variables de diferentes tipos, sin que tengan conflictos. $var @var %var # un escalar # un ''array'' # un ''hash''

Datos escalares
Los nmeros se escriben de la forma usual; los strings estn rodeados entre comillas de varias clases. $n = 42; $nombre = "juan"; $color = 'rojo'; Perl convertir los strings en nmeros y viceversa dependiendo del contexto en que sean usados.

Datos array
Una lista se define listando sus elementos, separados por comas y rodeados por parntesis donde as sea requerido por la precedencia de los operadores. @puntuaciones = (32, 45, 16, 5);

Datos hash
Un hash puede ser inicializado desde una lista de pares clave/valor. %favorito = ( joe => 'rojo', sam => 'azul', );

Tipos de datos

Datos booleanos
En Perl no existen tales datos, sin embargo cuando se analizan internamente si el dato contiene algun valor diferente de cero Perl lo considera como verdadero. $fruta = '0'; #Falso $fruta = '5'; #Verdadero $fruta = "5 mangos"; #Verdadero

Ejemplos
Valores Booleanos
Perl tambin tiene un contexto booleano que utiliza en la evaluacin de declaraciones condicionales. Los siguientes valores en Perl se evalan todos como falso: $falso $falso $falso $falso $falso = = = = = 0; 0.0; '0'; ""; undef; # # # # # el el el el el nmero cero nmero cero como flotante ''string'' cero ''string'' vaco valor devuelto por undef

Todos los dems valores se evalan a verdadero. Esto incluye el curioso string auto-descriptivo "0 pero verdadero", que de hecho es 0 como nmero, pero verdadero como booleano. (Cualquier string no numrico tambin tendr esta propiedad, pero este string en particular es ignorado por Perl en contextos numricos). Las expresiones booleanas evaluadas tambin devuelven valores escalares. Aunque la documentacin no indica qu valor particular se devuelve como verdadero o falso (y por lo tanto no fiable), muchos operadores booleanos devuelven 1 por verdadero y el string vaco para falso (que evala a cero en contexto numrico). La funcin defined() le dice si la variable tiene algn valor. Si a cada uno de los valores anteriores se le aplica defined($falso) ser verdadero con cada uno de los valores anteriores, excepto undef. Si, especficamente, quiere asegurarse de tener un resultado 1/0 (como en el lenguaje C), necesita realizar el clculo siguiente: my $resultado_real = $resultado_booleano ? 1 : 0;

Usando escalares
En el siguiente ejemplo los datos strings $n y $m son tratados como nmeros cuando son argumentos del operador suma. Este cdigo imprime el nmero '5', desechando cualquier informacin no numrica de la operacin y dejando los valores de las variables intactos. (El operador de concatenacin no es +, sino . (el signo de punto).) $n = "3 manzanas"; $m = "2 naranjas"; print $n + $m; Si en el ejemplo anterior, en vez de el smbolo suma coloca un punto. Se obtiene algo as: 3 manzanas2 naranjas sin espacio entre el texto concatenado(unido).

Tipos de datos

Combinando datos escalares, arrays y hashes


Los elementos individuales de una lista son accedidos utilizando un ndice numrico, dentro de corchetes. Valores individuales en un hash son accedidos utilizando la correspondiente clave, dentro de llaves. El sigil $ identifica que el elemento accedido es un escalar. $puntuaciones[2] $favorito{joe} # un elemento de @puntuaciones # un valor de %favorito

Mltiples elementos pueden ser accedidos usando en su lugar el sigil @ (identificando el resultado como una lista). @puntuaciones[2, 3, 1] @favorito{'joe', 'sam'} # tres elementos de @puntuaciones # dos valores de %favorito

El nmero de elementos en un array puede ser obtenido evaluando el array en contexto escalar o con la ayuda del sigil $#. ste ltimo da el ndice del ltimo elemento dentro del array, no el nmero de elementos. $numero = @amigos; $#amigos; # el ndice del ltimo elemento en @amigos $#amigos+1; # normalmente el nmero de elementos en @amigos, # que es uno ms que $#amigos porque el primer # elemento tiene el ndice 0, no 1

Funciones sobre datos hashes


Hay unas pocas funciones que operan sobre hashes enteros. # guarda en el array @nombres_de_clientes # todas las claves del hash %direcciones @nombres_de_clientes = keys %direcciones; # guarda en @direcciones_de_email # todos los valores de %direcciones @direcciones_de_email = values %direcciones;

Estructuras de control

10

Estructuras de control
Estructuras de control
Perl tiene varias clases de estructuras de control. Control de ciclos: do, while, for, foreach, continue. Control de sentencias: if, else, unless, until, elsif. Control de flujo: goto, elsif, next, last, redo, return.

Para varias sentencias


Tiene estructuras de control orientado al bloque, similar a las de los lenguajes de programacin C y Java. Las CONDICIONES estn rodeadas por parntesis () y Los BLOQUES rodeados por llaves {} Las expresiones opcionales por corchetes cuadrados [] Las ETIQUETAS deben llevar al final dos puntos ':';

[ETIQUETA] while CONDICION BLOQUE [continue BLOQUE ] [ETIQUETA] until CONDICION BLOQUE [continue BLOQUE ] [ETIQUETA] foreach [VARIABLE] (LISTA) BLOQUE [continue BLOQUE] [ETIQUETA] for (EXPRESION_1;EXPRESION_2;EXPRESION_3) BLOQUE if CONDICION BLOQUE [[elsif BLOQUE] else BLOQUE] unless CONDICION BLOQUE [else BLOQUE] Donde EXPRESION_1 es la expresion inicial, EXPRESION_2 la condicion y la EXPRESION_3 es la expresion incremental.

Para una sola sentencia


Cuando se controla a una sola declaracin, los modificadores de declaracin proporcionan una sintaxis ms ligera: DECLARACIN DECLARACIN DECLARACIN DECLARACIN DECLARACIN if CONDICIN unless CONDICIN while CONDICIN until CONDICIN foreach LISTA

Donde DECLARACIN es una instruccin, llamada a alguna funcion, etc. y en estos casos la CONDICIN en vez de estar rodeado por parentesis requiere un punto y coma al final de la condicin.

Operadores lgicos
Los operadores lgicos se utilizan para construir la CONDICIN en una estructura de control. EXPRESION1 EXPRESION1 EXPRESION1 EXPRESION1 EXPRESION1 EXPRESION1 and EXPRESION2; or EXPRESION2; && EXPRESION2; || EXPRESION2; eq EXPRESION2; == EXPRESION2;

Estructuras de control Donde EXPRESION1 y EXPRESION2 son variables a comparar o 'expresiones' boleanas(verdadero o falso) segn el contexto en que se use.

11

Operador triario
Una expresion que resume la sentencia if CONDICION BLOQUE else BLOQUE es: [DECLARACION] [(] CONDICIN ? EXPRESION_1 : EXPRESION_2 [)]; Donde la EXPRESION_1 es el valor devuelto si la CONDICIN es verdadera.

Control de flujo
Las palabras clave de control de flujo next, last, return y redo son expresiones, por lo que pueden ser usadas con los operadores cortocircuito.

Construcciones para ciclos


Perl tambin tiene dos construcciones implcitas para bucles: resultados = grep { ... } lista resultados = map { ... } lista grep devuelve todos los elementos de lista en que el bloque subordinado evala a verdadero. map evala el bloque subordinado por cada elemento de lista y devuelve una lista de los valores resultantes. Estas construcciones permiten un estilo simple de programacin funcional. No hay declaracin switch (salto multi-camino) en Perl 5. La documentacin Perl describe media docena de formas de conseguir el mismo efecto usando otras estructuras de control. Existe sin embargo un mdulo Switch [1], que proporciona la funcionalidad modelada para el prximo Perl 6.

Excentricidades para el control de flujo


Perl incluye una declaracin goto etiqueta, pero es usada raramente. Las situaciones donde en otros lenguajes se utiliza goto no ocurren tan a menudo en Perl debido a sus amplias opciones de control de flujo. Existe tambin una declaracin goto &sub que realiza una llamada 'final'. Termina la subrutina actual e inmediatamente llama a la sub especificada. Esto se usa en situaciones donde una nueva subrutina puede realizar una gestin de la pila ms eficiente que el propio Perl (porque tpicamente no se requiere ningn cambio en la pila actual), y en una recursin muy profunda este tipo de llamadas puede tener un sustancial impacto positivo en el funcionamiento porque evita la sobrecarga de la gestin contexto/pila en el momento de retornar.

Ejemplos
Los siguientes apartados son ejemplo de como usar las sentencias de control en Perl.

For
# Imprime los valores que toma $i, desde 0 hasta 99 for($i = 0; $i < 100; $i++){ print "$i\n"; } # Cuando $i es igual a 100 la expresion '$i < 100' se

Estructuras de control # evalua como falsa y el bucle termina

12

# Imprime una lista de nombres @amigos = ('Julia', 'Luis', 'Mateo', 'Maria'); $na = @amigos; for($i = 0; $i < $na; $i++) { print "$amigos[$i]\n"; }

Foreach
# El ejemplo anterior escrito de forma ms consisa @amigos = ('Julia', 'Luis', 'Mateo', 'Maria'); print "$_\n" foreach(@amigos); @array = (23,35,'rosas','rojas',3,'5 numeros'); # Recorre todos los valores de la lista. foreach(@array){ print $_; # Imprime el valore almacenado. }

If
$numero = 5; # Evalua $numero. if($numero == 5){ print 'Hola mundo'; } $numero = 'hola'; print 'Hola mundo' if $numero eq 'hola'; print 'cruel' if $numero; # Analiza las siguientes sentencias, # persiguen el mismo resultado. $numero = 0; print 'nunca deberia imprimir este texto' if $numero; print 'esta si se imprimira' if ! $numero; if($numero){ print 'nunca deberia imprimir este texto'; }elsif($numero == 5){ print 'este texto tampoco se imprimira'; }else{ print 'esta si se imprimira'; }

Estructuras de control print ($numero?'nunca deberia imprimir este texto':'esta si se imprimira');

13

Referencias
[1] http:/ / search. cpan. org/ perldoc/ Switch

Subrutinas
Subrutinas
Las subrutinas se definen con la palabra clave sub e invocadas simplemente nombrndolas. Si la subrutina en cuestin no ha sido todava declarada, es necesario, para el proceso de parseo, poner los parntesis. foo(); sub foo { ... } foo; # parntesis necesarios aqu... # ... pero no aqu

Una lista de argumentos pueden ser indicados despus del nombre de la subrutina. Los argumentos pueden ser escalares, listas o hashes. foo $x, @y, %z; Los parmetros de una subrutina no necesitan ser declarados, ni en nmero ni en tipo; de hecho, pueden variar en cada llamada. Los arrays son expandidos a sus elementos, los hashes a una lista de pares clave/valor y todo el conjunto es pasado a la subrutina como una indiferenciada lista de escalares. Cualesquiera de los argumentos pasados estn disponibles para la subrutina en el array especial @_. Los elementos de @_ son asociados a los argumentos actuales; cambiando un elemento de @_ cambia el argumento correspondiente. Los elementos de @_ pueden ser accedidos con los subndices de la forma normal. $_[0], $_[1] Sin embargo, el cdigo resultante puede ser difcil de leer y los parmetros tener una semntica de pase por referencia, que puede resultar algo no deseable. Un modismo comn es asignar @_ a una lista de variables con nombres. my($x, $y, $z) = @_; Esto afecta tanto a la mnemnica de los nombres de los parmetros como a la semntica de los valores pasados por valor. La palabra clave my indica que las siguientes variables estn lxicamente embebidas en el bloque que las contienen. Otro modismo es sacar los parmetros de @_. Esto es muy comn cuando la subrutina toma un slo argumento. my $x = shift; # Si no se dice nada, nos referimos a @_

Las subrutinas pueden devolver valores. return 42, $x, @y, %z; Si la subrutina no sale va declaracin return, entonces devuelve la ltima expresin evaluada en el cuerpo de la subrutina. Arrays y hashes en el valor de retorno son expandidos a una lista de escalares, igual que si fueran

Subrutinas argumentos de una funcin. La expresin devuelta es evaluada en el contexto de la llamada de la subrutina; esto puede sorprender al desprevenido. sub lista { (4, 5, 6) } sub array { @x = (4, 5, 6); @x } $x $x @x @x = = = = lista; array; lista; array; # # # # devuelve devuelve devuelve devuelve 6 3 (4, (4, ltimo elemento de la lista nmero de elementos de la lista 5, 6) 5, 6)

14

Una subrutina puede descubrir su contexto de llamada con la funcin wantarray. sub cualquiera { wantarray ? (1, 2) : "Naranjas" } $x = cualquiera; @x = cualquiera; # devuelve "Naranjas" # devuelve (1, 2)

Expresiones regulares
Expresiones regulares
El lenguaje Perl incluye una sintaxis especializada para escribir expresiones regulares y el intrprete contiene un motor para emparejar strings con expresiones regulares. El motor de expresiones regulares usa un algoritmo de Vuelta Atrs (backtracking), extendiendo sus capacidades desde el simple emparejamiento de patrones simples con la captura y sustitucin de strings. El motor de expresiones regulares se deriva de regex, escrito por Henry Spencer. La sintaxis de expresiones regulares fue originalmente tomada de las expresiones regulares de Unix Versin 8. Sin embargo, se diferenci ya antes del primer lanzamiento de Perl y desde entonces ha ido incorporando muchas ms caractersticas. Otros lenguajes y aplicaciones estn adoptando las expresiones regulares de Perl en vez de las expresiones regulares POSIX, incluyendo PHP, Ruby, Java y el Servidor HTTP Apache. El operador m// (empareja) permite comprobar un emparejamiento por medio de una expresin regular. (Para abreviar, el precedente m puede ser omitido.) En el caso ms simple, una expresin como: $x =~ m/abc/ evala a verdadero si y slo si el string $x empareja con la expresin regular abc. Partes de la expresin regular pueden ser incluidas entre parntesis: las partes correspondientes de un string emparejado son capturadas. Los strings capturados son asignados de forma secuencial a las variables internas $1, $2, $3, ... y una lista de strings capturados se devuelve como valor del emparejamiento. $x =~ m/a(.)c/; # captura el carcter entre 'a' y 'c' y lo guarda en $1

El operador s/// (sustitucin) especifica una operacin de bsqueda y reemplazo: $x =~ s/abc/aBc/; # Convierte la b en mayscula

Las expresiones regulares en Perl pueden tomar unos modificadores. Son sufijos de una sola letra que modifican el significado de la expresin:

Expresiones regulares
$x =~ m/abc/i; $x =~ s/abc/aBc/g; # emparejamiento independientemente de si estn en mayscula o minscula # bsqueda y reemplazo global (a lo largo de todo el string)

15

Las expresiones regulares pueden ser densas y crpticas. Esto es porque la sintaxis de las expresiones regulares es extremadamente compacta, generalmente usando caracteres sueltos o pares de caracteres que representan sus operaciones. Perl alivia un poco este problema con el modificador /x que permite a los programadores poner espacio en blanco y comentarios dentro de las expresiones regulares: $x =~ m/a . c /x; Un uso comn de las expresiones regulares es el de especificar delimitadores de campos al operador split:
@palabras = split m/,/, $lnea; # divide la $lnea de valores separados por comas

# empareja una 'a' # empareja cualquier carcter # empareja una 'c'

El operador split complementa la captura de string. La captura de string devuelve las partes de un string que emparejan con una expresin regular; split devuelve las partes que no emparejan.

Funciones
Funciones para array
Hay varias funciones para trabajar con arrays Las mas bsicas son push, pop, shift y splice donde: #!/usr/bin/env perl # cada elemento adquiere un valor en el listado, desde 0 hasta el ultimo my @array = ('feo', 'mico', 'lindo', 'leon', 'gande', 'Andres'); my $tipo = $array[-1]; #tomamos el ultimo elemento, podria ser #my $tipo = $array[5], donde $array[5] == $array[-1] my $nombre = pop @array; #@array ya no tiene a "Andres"M; push @array, $tipo; #nuevamente ponemos a "Andres" en la lista. my $como = shift @array; #tomamos el primer valor del array #esto is igual que $array[0] print "El $array[1] es muy $como\n"; #hemos hecho esto sin alterar el array La diferencia entre un array y una lista est en que el array se puede tirar, empujar, mover y agregar elementos y una lista es tan slo un montn de valores agrupados donde no tiene una longitud cambiable.

Funciones

16

Buscar en un arrary
En este ejemplo tenemos un array que tiene de contenido una lista de colores de los cuales algunos estan repetidos. Navegamos dentro del array en orden y comprobamos si alguno de los colores se repite. En caso de que alguno se repita (es decir, que ya lo tenemos dentro del array nuevo) no lo ingresamos otra ves por lo que tenemos un nuevo listado sin repeticiones.
#!/usr/bin/perl

@array = ('azul','rojo','verde','rojo','negro','azul','blanco');## CARGANDO UNA LISTA

foreach (@array) { $line = $_;

## ASIGNANDO A $_ CADA ELEMENTO DE @array

## CARGANDO $line CON VALOR EN $_ ## SI ALGUN VALOR DE LISTA @nuevo COINCIDE ## CON VALOR $line LO COPIO A @found

@found = grep(/^$line$/, @nuevo);

if (!@found) { push(@nuevo,$_); } }

## SI LISTA FOUND ES MAYOR QUE 0 ELEMENTOS...

## AGREGO ELEMENTO LEIDO A LISTA @nuevos

foreach (@nuevo) { $line = $_; print $line,"\n"; }

## ASIGNANDO A $_ CADA ELEMENTO DE @nuevo

## CARGANDO $line CON VALOR EN $_ ## IMPRIMIENDO $line (UNO POR RENGLON)

## TIMTOWTDI (There Is More Than One Way To Do It) (n.t. Hay Mas De Una Forma De Hacerlo)...

## my (%unico);

## DEFINO UN HASH QUE GUARDE SOLO 1 COLOR

## $unico{$_}++ foreach ('azul','rojo','verde','rojo','negro','azul','blanco'); ## CARGO LOS COLORES ## print($_,$/) foreach (keys(%unico)); ## LISTO SOLO LOS NOMBRES DE LOS COLORES ## SOLO PUEDE HABER 1 CLAVE DE CADA COLOR...

Ms Funciones
chop
Elimina el ltimo caracter de una cadena y devuelve el caracter "chopeado"
$escalar = "vivan los novios"; print (chop $escalar); print "\n"; print $escalar; EL RESULTADO seria: s vivan los novio ## La s ltima de novios ## Fjate que la s ya no acompaa a novio(s) ## Para crear nueva lnea (como pulsar la tecla ENTER) ## Imprimir el contenido de la variable $escalar

Funciones Si se usa con arrays cada elemento es "chopeado" pero solo el ltimo valor del ultimo chop es devuelto. Si se usa con un hash elimina los valores pero no las llaves. Funciones utilizadas: foreach [1] - push [2] - grep [3] - chop [4] Conceptos implicados: Expresin regular [5] - grep [6] - array - hash ndice - Manejo de archivos >>

17

Referencias
[1] [2] [3] [4] [5] [6] http:/ / flanagan. ugr. es/ perl/ control. htm http:/ / perldoc. perl. org/ functions/ push. html http:/ / perldoc. perl. org/ functions/ grep. html http:/ / perldoc. perl. org/ functions/ chop. html http:/ / es. wikipedia. org/ wiki/ Expresi%C3%B3n_regular http:/ / es. wikipedia. org/ wiki/ Grep

Fuentes y contribuyentes del artculo

18

Fuentes y contribuyentes del artculo


Programacin en Perl Fuente: http://es.wikibooks.org/w/index.php?oldid=140711 Contribuyentes: Almorca, Arkin, Celeron, Esmarger, GuERo, Oleinad, 11 ediciones annimas Introduccin Fuente: http://es.wikibooks.org/w/index.php?oldid=165860 Contribuyentes: Esmarger, Ihuhnix, ManuelGR, Oleinad, 14 ediciones annimas Fundamentos Fuente: http://es.wikibooks.org/w/index.php?oldid=97689 Contribuyentes: Oleinad, 2 ediciones annimas Tu primer programa Fuente: http://es.wikibooks.org/w/index.php?oldid=168242 Contribuyentes: Albmont, Esmarger, GuERo, Oleinad, 6 ediciones annimas Tipos de datos Fuente: http://es.wikibooks.org/w/index.php?oldid=178529 Contribuyentes: GuERo, Oleinad, 3 ediciones annimas Estructuras de control Fuente: http://es.wikibooks.org/w/index.php?oldid=149180 Contribuyentes: Esmarger, Oleinad, 12 ediciones annimas Subrutinas Fuente: http://es.wikibooks.org/w/index.php?oldid=98544 Contribuyentes: Oleinad Expresiones regulares Fuente: http://es.wikibooks.org/w/index.php?oldid=98545 Contribuyentes: Oleinad Funciones Fuente: http://es.wikibooks.org/w/index.php?oldid=100185 Contribuyentes: Oleinad, 2 ediciones annimas

Fuentes de imagen, Licencias y contribuyentes

19

Fuentes de imagen, Licencias y contribuyentes


Archivo:25%.svg Fuente: http://es.wikibooks.org/w/index.php?title=Archivo:25%.svg Licencia: Public Domain Contribuyentes: Karl Wick Image:Attention.png Fuente: http://es.wikibooks.org/w/index.php?title=Archivo:Attention.png Licencia: Public Domain Contribuyentes: Korrigan, Loveless, 1 ediciones annimas

Licencia

20

Licencia
Creative Commons Attribution-Share Alike 3.0 Unported //creativecommons.org/licenses/by-sa/3.0/

S-ar putea să vă placă și