Upload
others
View
2
Download
0
Embed Size (px)
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Lenguajes de ScriptingPerl
Horst H. von Brand
Departamento de InformaticaUniversidad Tecnica Federico Santa Marıa
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
ContenidoLenguajes de ScriptingIntroduccion al lenguaje PerlDetalles del lenguaje
Tipos de datosContextosOperadoresEstructuras de controlFunciones predefinidasExpresiones regularesSubrutinasEstructuras de datos y referencias
Orientacion a objetos en PerlPaquetesModulosObjetos
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Caracterısticas de lenguajes de scripting
I “Script” es guionI Invocar programas automaticamenteI Lenguajes interpretadosI Muy alto nivel
I Caracterısticas generalesI Manejo de strings y expresiones regularesI Sin tipos, variables no se declaranI Administracion automatica de memoria
I Caracterısticas adicionalesI Empotrable: Puede usarse desde dentro de programasI Extensible: Pueden agregarse nuevas funcionalidades
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Algunos lenguajes
I Perl: Oficialmente, abreviatura de Practical Extraction andReport Language
I Python: Por Monty PythonI PHP: Abreviatura de PHP: Hypertext ProcessorI Ruby: La piedra preciosa (si hay perlas. . . )I TCL: Es Tool Control Language, creado con la idea de ser
un lenguaje de extension/configuracionI expect: Una extension de TCL, orientada a controlar
programas interactivosI AWK: Lenguaje inventado por Aho, Weinberger,
Kernighan.
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Perl
I Practical Extracting and Report LanguageI Pathologically Eclectic Rubish Lister
I Lema: “There’s more than one way to do it” (TMTOWTDI)I No pretende ser simple, regular, ortogonalI Si aspira a ser comodo, natural y rapido de usar
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Lınea de comandos
El tradicional programa en Perl puede escribirse:
perl -e ’print "Hello, world!\n";’
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Lınea de comandos
Repetir un comando sobre cada lınea de los archivosmencionados, que se editan en su lugar, quedando losoriginales en los respectivos .bak:
perl -pi.bak -e ’s/hoy/ayer/g’ uno dos
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Ejemplos simplesContar lıneas, palabras, caracteres
# ! / usr / b in / p e r l
while (<>) {$ l i n e s ++;$words += s p l i t ;$chars += length ;
}
pr in t ” $ l i n e s $words $chars\n ” ;
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Ejemplos simplesContar lıneas, palabras, caracteres – version “completa”
# ! / usr / b in / p e r l −wuse s t r i c t ;
my( $ l i ne , $ l ines , $words , $chars , @tmp ) ;
while ( $ l i n e = <STDIN>) {$ l i n e s ++;@tmp = s p l i t ( / \ s + / , $ l i n e ) ; $words += @tmp;$chars += length ( $ l i n e ) ;
}pr in t STDOUT ” $ l i n e s $words $chars\n ” ;
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Ejemplos simplesReferencias cruzadas
# ! / usr / b in / p e r lwhile (<>) {
foreach $w ( s p l i t ( / \W+ / ) ) {i f ( ! defined ( $r {$w} ) ) {
$r {$w} = $ . ;} else {
$r {$w} .= ” , $ . ” unless $r {$w} =˜ / $ . / ;}
}}foreach $w ( sort keys %r ) {
pr in t ”$w : $r {$w}\n ” i f $w;} Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Ejemplos simplesEntrada y salida
# ! / usr / b in / p e r lopen ( IN , ”< i npu t ” ) ; chomp( @l i s t = <IN > ) ; close ( IN ) ;
open (PGM, ” s o r t i npu t | ” ) ; open (OUT, ”> output ” ) ;while (<PGM>) {
chomp ;for ( $ i = 0 ; $ i <= $# l i s t ; $ i ++) {
pr in t OUT ” $ i : $ l i s t [ $ i ]\n ” i f ( $ l i s t [ $ i ] eq $ ) ;}
}close (PGM, OUT) ;
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Tipos de datosContextosOperadoresEstructuras de controlFunciones predefinidasExpresiones regularesSubrutinasEstructuras de datos y referencias
Tipos de datos basicos
I $escalar: Strings, numeros, referencias.I @arreglo: Elementos $arreglo[0], . . . , $arreglo[$#arreglo]I %hash: Arreglo asociativo, elementos $hash{”clave”}
I Slices: @arreglo[1, 17, 3], @hash{”uno”, ”doce”, ”nueve”}I Inicializar:
I @a = (”Do”, ”Lu”, ”Ma”, ”Mi”, ”Ju”, ”Vi” , ”Sa”);I %h = (”cero” => 0, ”uno” => 1, ”dos” => 2);
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Tipos de datosContextosOperadoresEstructuras de controlFunciones predefinidasExpresiones regularesSubrutinasEstructuras de datos y referencias
Constantes numericas
I Decimal: 100I Para legibilidad: 1 000I Decimales: 3.141592I Con exponente: 6.024e24I Octal: 0277I Hexadecimal: 0x3ffI Binario: 0b1010 0011
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Tipos de datosContextosOperadoresEstructuras de controlFunciones predefinidasExpresiones regularesSubrutinasEstructuras de datos y referencias
Escapes en strings
Los de C, con algunos adicionales:
Codigo Significado”\cC” Control-C”\x{263a}” Unicode (smiley)”\N{Nombre}” Caracter por nombre
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Tipos de datosContextosOperadoresEstructuras de controlFunciones predefinidasExpresiones regularesSubrutinasEstructuras de datos y referencias
Escapes activos en strings
Codigo Accion”\u” Siguiente es mayuscula (titlecase)”\ l ” Siguiente es minuscula”\U” Mayusculas”\L” Minusculas”\Q” Backslash antes de no-alfanumericos”\E” Fin de ”\U”, ”\L”, ”\Q”
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Tipos de datosContextosOperadoresEstructuras de controlFunciones predefinidasExpresiones regularesSubrutinasEstructuras de datos y referencias
Contextos
Toda expresion se evalua en el contexto dado por como se usa.Hay dos contextos basicos:
Escalar: Arreglos dan su largo, hashes dan estadısticas desu uso, y una variedad de funciones entreganresultados escalares
Lista: Arreglos/listas dan sus valores; hashes dan lospares (clave, valor) en una lista; escalares danuna lista de un elemento
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Tipos de datosContextosOperadoresEstructuras de controlFunciones predefinidasExpresiones regularesSubrutinasEstructuras de datos y referencias
Valores de verdad
Cuando se requiere un valor de verdad, esto proveeimpıcitamente contexto escalar. Perl usa los siguientescriterios:
I Cualquier string, salvo ” ” y ”0”, es verdaderoI Todo numero, salvo 0, es verdaderoI Cualquier referencia es verdaderaI Cualquier valor no definido es falso
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Tipos de datosContextosOperadoresEstructuras de controlFunciones predefinidasExpresiones regularesSubrutinasEstructuras de datos y referencias
Operadores
Basicamente los de C, pero con algunas adiciones:
I Rango: 1..10, \”a0\”..\” z9\”I Concatenacion de strings: $saludo . ” , ” . $nombre
(Claro que se escribirıa ”$saludo, $nombre” mas bien)I Repetir un string: ”\t ” x ($k / 8) . ” ” x ($k % 8)I Potencia: $num ∗∗ 5
Ademas las combinadas con asignacion (salvo rango).
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Tipos de datosContextosOperadoresEstructuras de controlFunciones predefinidasExpresiones regularesSubrutinasEstructuras de datos y referencias
Operadores logicos adicionales
Hay operadores logicos de muy baja precedencia, usados masque nada por la evaluacion en cortocircuito:
open(IN, ”< $file” ) or die ”Can’t open $file” ;
/ˆ #/ and next;
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Tipos de datosContextosOperadoresEstructuras de controlFunciones predefinidasExpresiones regularesSubrutinasEstructuras de datos y referencias
Comparaciones
Comparacion Numero StringMenor que < ltMenor o igual que <= leIgual a == eqMayor o igual que >= geMayor que > gtNo igual a != neComparar <=> cmp
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Tipos de datosContextosOperadoresEstructuras de controlFunciones predefinidasExpresiones regularesSubrutinasEstructuras de datos y referencias
Estructuras de control
i f (CONDITION) {. . .
}e l s i f (CONDITION) {
. . .}else {
. . .}
unless (CONDITION){. . .
}Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Tipos de datosContextosOperadoresEstructuras de controlFunciones predefinidasExpresiones regularesSubrutinasEstructuras de datos y referencias
Estructuras de control
while (CONDITION) {. . .l as t ;. . .next ;. . .
} continue {. . .
}
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Tipos de datosContextosOperadoresEstructuras de controlFunciones predefinidasExpresiones regularesSubrutinasEstructuras de datos y referencias
Estructuras de control
u n t i l (CONDITION) {. . .l as t ;. . .next ;. . .
} continue {. . .
}
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Tipos de datosContextosOperadoresEstructuras de controlFunciones predefinidasExpresiones regularesSubrutinasEstructuras de datos y referencias
Estructuras de control
for ( INIT ; CONDITION ; UPDATE) {. . .next ;. . .l as t ;. . .
}
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Tipos de datosContextosOperadoresEstructuras de controlFunciones predefinidasExpresiones regularesSubrutinasEstructuras de datos y referencias
Estructuras de control
foreach VAR ( LIST ) {. . .next ;. . .l as t ;. . .
}
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Tipos de datosContextosOperadoresEstructuras de controlFunciones predefinidasExpresiones regularesSubrutinasEstructuras de datos y referencias
Modificadores
. . . i f (CONDITION ) ;
. . . unless (CONDITION ) ;
. . . while (CONDITION ) ;
. . . u n t i l (CONDITION ) ;
. . . foreach LIST ;
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Tipos de datosContextosOperadoresEstructuras de controlFunciones predefinidasExpresiones regularesSubrutinasEstructuras de datos y referencias
Modificadores
do {. . .
} while (CONDITION ) ;
do {. . .
} u n t i l (CONDITION ) ;
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Tipos de datosContextosOperadoresEstructuras de controlFunciones predefinidasExpresiones regularesSubrutinasEstructuras de datos y referencias
Rotulos de ciclos
LABEL : {. . .next LABEL ;. . .l as t LABEL ;. . .
}
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Tipos de datosContextosOperadoresEstructuras de controlFunciones predefinidasExpresiones regularesSubrutinasEstructuras de datos y referencias
Funciones predefinidasManejo de arreglos como deque
I push ARRAY, LISTI $var = pop ARRAYI $var = shift ARRAY
Por omision, @ARGV o @I unshift ARRAY, LIST
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Tipos de datosContextosOperadoresEstructuras de controlFunciones predefinidasExpresiones regularesSubrutinasEstructuras de datos y referencias
Funciones predefinidasCombinar/dividir strings
I join EXPR, LISTI split /PATTERN/, EXPR, LIMIT
O sea, se puede hacer algo como:
perl -e ’print join(" ", split //, shift), "\n";’ ’Alguna ch\penalty \@M \hskip \z@skip \unhbox \voidb@x \bgroup \let \unhbox \voidb@x \setbox \@tempboxa \hbox {a\global \mathchardef \accent@spacefactor \spacefactor }\accent 19 a\egroup \spacefactor \accent@spacefactor \penalty \@M \hskip \z@skip \setbox \@tempboxa \hbox {a\global \mathchardef \accent@spacefactor \spacefactor }\spacefactor \accent@spacefactor chara’
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Tipos de datosContextosOperadoresEstructuras de controlFunciones predefinidasExpresiones regularesSubrutinasEstructuras de datos y referencias
Funciones predefinidasManipulacion de arreglos
I sort BLOCK ARRAYBLOCK compara $a con $b
I map BLOCK ARRAY o map EXPR, ARRAYI grep BLOCK ARRAY o grep EXPR, ARRAY
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Tipos de datosContextosOperadoresEstructuras de controlFunciones predefinidasExpresiones regularesSubrutinasEstructuras de datos y referencias
Funciones predefinidasManipulacion de strings
I lc EXPR, uc EXPRI lcfirst EXPR, ucfirst EXPR
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Tipos de datosContextosOperadoresEstructuras de controlFunciones predefinidasExpresiones regularesSubrutinasEstructuras de datos y referencias
Funciones predefinidasOtras clases
I Manipulacion de procesosI Hebras (threads)I NumericasI Llamadas propias de UNIX
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Tipos de datosContextosOperadoresEstructuras de controlFunciones predefinidasExpresiones regularesSubrutinasEstructuras de datos y referencias
Un ejemplo de usoDatos
Supongamos que tenemos un archivo con el siguiente“creativo” formato. Viene ordenado por apellido:
HERNANDEZ:GOMEZ:LUIS:234567-8IN:OUT:GIGO:891234-6LI:CHIANG:DANIEL ALBERTO:345678-9NOGUERA:NORAMBUENA:NELLY NORA:987654-3PEREZ:LOPEZ:JUAN PABLO:123456-7SALGADO:NARDEZ:JOSEFO LUIS ALBERTO JAVIER:456789-KZAMORA:YUMA:ADAN BENJAMIN CARLOS DAVID:132547-6
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Tipos de datosContextosOperadoresEstructuras de controlFunciones predefinidasExpresiones regularesSubrutinasEstructuras de datos y referencias
Un ejemplo de usoSalida deseada
Se requiere un archivo con el rol, seguido por el nombre. Debeestar ordenado por rol:
123456-7: Juan Pablo Perez Lopez132547-6: Adan Benjamin Carlos David Zamora Yuma234567-8: Luis Hernandez Gomez345678-9: Daniel Alberto Li Chiang456789-K: Josefo Luis Alberto Javier Salgado Nardez891234-6: Gigo In Out987654-3: Nelly Nora Noguera Norambuena
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Tipos de datosContextosOperadoresEstructuras de controlFunciones predefinidasExpresiones regularesSubrutinasEstructuras de datos y referencias
Un ejemplo de usoEl programa
# ! / usr / b in / p e r lopen (OUT, ” | s o r t ” ) ;while (<>) {
chomp ;@a = map { jo in ’ ’ , map { u c f i r s t lc } s p l i t }
s p l i t / : / ;pr in t OUT ” \U$a [ 3 ] : ” , jo in ( ’ ’ , @a[2 , 0 , 1 ] ) ,
” \n ” ;}close (OUT) ;
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Tipos de datosContextosOperadoresEstructuras de controlFunciones predefinidasExpresiones regularesSubrutinasEstructuras de datos y referencias
Referencias cruzadasUna version mas sofisticada
# ! / usr / b in / p e r l
while (<>) {foreach ( s p l i t /\W+ / ) {
/ ˆ $ / and next ;$ re f {$ } .= $ re f {$ } ? ” , $ . ” : $ .
unless $ re f {$ } =˜ / $ . / ;}
}pr in t map ” $ : $ re f {$ }\n ” , sort keys %re f ;
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Tipos de datosContextosOperadoresEstructuras de controlFunciones predefinidasExpresiones regularesSubrutinasEstructuras de datos y referencias
Operadores especiales
Comun Gral Int Significa’ ... ’ q{...} No String” ... ” qq{...} Si String‘...‘ qx{...} Si Comando
qw{...} No Palabras/.../ m{...}imosx Si Calza patron
qr {...} imosx Si Patrons {...}{...} egimosx Si Reemplazotr {...}{...} cds No Transliterar
Los delimitadores pueden ser “cualquier cosa”. Parentesisdeben parearse.
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Tipos de datosContextosOperadoresEstructuras de controlFunciones predefinidasExpresiones regularesSubrutinasEstructuras de datos y referencias
Operadores especialesCalce de patron
En m /.../ imosx y qr /.../ imosx:i No distinga mayusculas/minusculasm Multiples lıneaso Compilar una sola vez (once)s Una sola lıneax Expresiones regulares extendidas
qr /.../ retorna un objeto que puede darse en vez de un patronal buscar/reemplazar.
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Tipos de datosContextosOperadoresEstructuras de controlFunciones predefinidasExpresiones regularesSubrutinasEstructuras de datos y referencias
Operadores especialesReemplazo
En s /.../.../ egimosx:
e Lado derecho es expresiong Globalmentei No distinga mayusculas/minusculasm Multiples lıneaso Compilar una sola vez (once)s Una sola lıneax Expresiones regulares extendidas
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Tipos de datosContextosOperadoresEstructuras de controlFunciones predefinidasExpresiones regularesSubrutinasEstructuras de datos y referencias
Operadores especialesTransliterar
En tr /BUSCA/REEMPLAZO/cds:c Complementod Elimine los sin traduccions Secuencias duplicadas se reducen a uno (squash)
tr /A−J/0−9/: Como tr /ABCDEFGHIJ/0123456789/tr /0−9/9/tr /A−Za−z//s: ’Mississippi’ ’Misisipi’
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Tipos de datosContextosOperadoresEstructuras de controlFunciones predefinidasExpresiones regularesSubrutinasEstructuras de datos y referencias
Expresiones regulares
Son patrones de busqueda en texto. Siendo Perl un lenguajebasado en manipular texto, son fundamentales. Muchamanipulacion de texto es “busqueda y reemplazo”, dondeobviamente son parte central.Las de Perl existen tambien como biblioteca aparte para usoen otros programas: PCRE. En rigor, no son expresionesregulares, pero no seremos nosotros quienes cambien el usodel termino. . .
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Tipos de datosContextosOperadoresEstructuras de controlFunciones predefinidasExpresiones regularesSubrutinasEstructuras de datos y referencias
Expresiones regulares
En los patrones hay caracteres “normales” (que se representana sı mismos) y metacaracteres, con significado especial. EnPerl todos los metacaracteres son caracteres no alfanumericos,y todos ellos pierden su significado especial si se preceden conbackslash. Esta es la funcion del escape ”\Q...\E”.
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Tipos de datosContextosOperadoresEstructuras de controlFunciones predefinidasExpresiones regularesSubrutinasEstructuras de datos y referencias
Expresiones regulares
Cada construccion calza con un patron dado, en una posicionespecıfica. A las construcciones que solo registran unaposicion (no calzan con caracteres) les llaman anchor.Las construcciones en general son voraces: Calzan lo mas quepueden. Pero tambien son poco previsoras: Calzan en laprimera oportunidad, aunque hayan calces “mejores” masadelante.
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Tipos de datosContextosOperadoresEstructuras de controlFunciones predefinidasExpresiones regularesSubrutinasEstructuras de datos y referencias
Expresiones regularesCaracteres individuales
. Calza con cualquier caracter (salvo ”\n”, si /s)[...] Conjunto de caracteres.
ˆ niega, – rango.[: ... :] conjunto POSIX
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Tipos de datosContextosOperadoresEstructuras de controlFunciones predefinidasExpresiones regularesSubrutinasEstructuras de datos y referencias
Expresiones regularesCaracteres individuales
”\w” Palabra (alfanumerico y )”\W” No-palabra”\s” Espacio”\S” No-espacio”\d” Dıgito”\D” No-dıgito
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Tipos de datosContextosOperadoresEstructuras de controlFunciones predefinidasExpresiones regularesSubrutinasEstructuras de datos y referencias
Expresiones regularesOperadores
* Repetir lo anterior cero o mas veces+ Repetir lo anterior una o mas veces? Lo anterior es opcional
{m, n} Repetir lo anterior entre m y n veces, {n}exactamente n veces, {n,} al menos n veces
| Alternativas(...) Agrupa (y recuerda en ”\1” y $1, . . . )
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Tipos de datosContextosOperadoresEstructuras de controlFunciones predefinidasExpresiones regularesSubrutinasEstructuras de datos y referencias
Expresiones regularesAnchors
ˆ Principio del string (o la lınea, si /m)$ Fin del string (o la lınea, si /m)
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Tipos de datosContextosOperadoresEstructuras de controlFunciones predefinidasExpresiones regularesSubrutinasEstructuras de datos y referencias
Expresiones regularesAnchors
”\b” Borde de palabra”\B” No-borde de palabra”\A” Principio del string”\Z” Final del string (o antes de ”\n” final)”\z” Final del string
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Tipos de datosContextosOperadoresEstructuras de controlFunciones predefinidasExpresiones regularesSubrutinasEstructuras de datos y referencias
Expresiones regulares extendidas
Permite espacios y comentarios.
(?imsx–imsx) Opciones (– apaga)+?, *? Mınimo posible (no voraz)(?# ...) Comentario(?: ...) Agrupa sin recordar, (?imsx–imsx: ...) con
opciones(?= ...) Lookahead positivo, (?! ...) negativo
Hay mas. . .
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Tipos de datosContextosOperadoresEstructuras de controlFunciones predefinidasExpresiones regularesSubrutinasEstructuras de datos y referencias
Busquedas y reemplazos
m/(\w+) \1/ # Palabras repetidas
($h, $m, $s) = $hms =˜ m/(\d+):(\d+):(\d+)/;
m{ˆ(.∗): GIF}; # Ahora $1 es lo que calza
s<ˆ(?:foo|bar)([0−9]+)>[$1−baz−$1]
s/(\[0−9\]+)/$1 + 3/ge
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Tipos de datosContextosOperadoresEstructuras de controlFunciones predefinidasExpresiones regularesSubrutinasEstructuras de datos y referencias
SubutinasUn ejemplo simple
# ! / usr / b in / p e r lsub Ul{
my $x = s h i f t ;
return u c f i r s t lc $x ;}
while (<>) {pr in t Ul $ ;
}
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Tipos de datosContextosOperadoresEstructuras de controlFunciones predefinidasExpresiones regularesSubrutinasEstructuras de datos y referencias
SubrutinasManejo de arreglos
# ! / usr / b in / p e r lsub acc{
my $s ;
foreach (@ ) {$s += $ ; $ = $s ;}return @ ;
}
while (<>) { pr in t jo in ’ ’ , acc s p l i t ; pr in t ” \n ” ; }
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Tipos de datosContextosOperadoresEstructuras de controlFunciones predefinidasExpresiones regularesSubrutinasEstructuras de datos y referencias
Subrutinas – definicion generalPrototipos
La definicion general de subrutina tiene la forma:
sub NAME(PROTO): ATTRS BLOCK
I El prototipo y los atributos son opcionales.I Si no hay bloque, es declaracion unicamente.I Si no se da nombre, es anonima.
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Tipos de datosContextosOperadoresEstructuras de controlFunciones predefinidasExpresiones regularesSubrutinasEstructuras de datos y referencias
Subrutinas – definicion generalPrototipos
$ Escalar@ Arreglo\@ Referencia a arreglo\% Referencia a hash& Bloque∗ Glob
\[$@] Escalar o arreglo\%;$ Referencia a hash, escalar opcional
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Tipos de datosContextosOperadoresEstructuras de controlFunciones predefinidasExpresiones regularesSubrutinasEstructuras de datos y referencias
Subrutinas – definicion generalAtributos
Mecanismo para limitar acceso o dar informacion sobre lasubrutina. Basicamente definido por el usuario.
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Tipos de datosContextosOperadoresEstructuras de controlFunciones predefinidasExpresiones regularesSubrutinasEstructuras de datos y referencias
Multiples dimensiones
En Perl es posible escribir por ejemplo:
$a [3][4] = $b{’Lu’}[2]{ ’C−201’}
Claro que esto es diferente de lo que parece. . .Tenemos un hash %b que bajo ’Lu’ tiene una referencia a unarreglo anonimo, cuyo tercer elemento es una referencia a unhash anonimo del cual tomamos el valor con clave ’C−201’.
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Tipos de datosContextosOperadoresEstructuras de controlFunciones predefinidasExpresiones regularesSubrutinasEstructuras de datos y referencias
Manejo explıcito de referencias
Podemos depositar una referencia en una variable
$a = \$x; $b = \@y; $c = \%h;
y despues usarla descaradamente
${$a} = 37; push @{$b}, (1, 2, 3); ${$c}{’Lu’} .= ” , FIS”;
desmanes que son aplicables tambien a rutinas
sub una fun; $f = \&una fun; &{$f}(1, 2, 3);
donde nada impide que tengamos arreglos (o hashes) conelementos de diferentes tipos. . .
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Tipos de datosContextosOperadoresEstructuras de controlFunciones predefinidasExpresiones regularesSubrutinasEstructuras de datos y referencias
Objetos anonimos
Podemos crear objetos anonimos de los distintos tipos, yasignar referencias a ellos:
$a[0] = [1, 2, $x, @y]; # Arreglo$a[1] = { ’uno’ => 1, ’dos’ => 2}; # Hash$a[2] = sub {map $ ∗ 3, @ }; # Rutina
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
Tipos de datosContextosOperadoresEstructuras de controlFunciones predefinidasExpresiones regularesSubrutinasEstructuras de datos y referencias
Un ejemplo extrano
# ! / usr / b in / p e r l
$a [ 0 ] = [0 , 1 , 2 ] ; $a [ 0 ] [ 3 ] = 3 ; push @{$a [ 0 ] } , 4 , 5 ;
$a [ 1 ] = { ’ uno ’ => 1 , ’ dos ’ => 2} ;$a [ 1 ] { ’ t r e s ’ } = 3;
$a [ 2 ] = sub {map $ ∗ 3 , @ } ;
pr in t ” $ : $a [ 1 ] { $ }\n ” foreach ( sort keys %{$a [ 1 ] } ) ;pr in t jo in ( ’ ’ , $a [ 2 ] (@{$a [ 0 ] } ) ) , ” \n ” ;
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
PaquetesModulosObjetos
Paquetes
# ! / usr / b in / p e r lpackage Saludos ;$Despedida = ”Chao . . . ” ;$h i = ” Hola ! ” ;sub bye ( ) { $Despedida ; }
package main ;pr in t $Saludos : : h i . ” \n ” ;pr in t Saludos : : bye ( ) . ” \n ” ;
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
PaquetesModulosObjetos
ModulosEl usuario
# ! / usr / b in / p e r l
use Modulo ;
pr in t func @ARGV;pr in t ” \n ” ;
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
PaquetesModulosObjetos
ModulosEl modulo mismo
# Modulo .pmpackage Module ;BEGIN {
use Expor ter ( ) ;our ($VERSION, @ISA,
@EXPORT, @EXPORT OK, %EXPORT TAGS ) ;@ISA = qw( Expor ter ) ;@EXPORT = qw(& func ) ;
}
sub func { ” | ” . ( jo in ’ : ’ , @ ) . ” | ” ; }
1; Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
PaquetesModulosObjetos
Objetos en Perl
1. Un objeto es una referencia que sabe a que clasepertenece
2. Una clase es un paquete que provee metodos parareferencias a objetos
3. Un metodo es una subrutina que recibe una referencia aun objeto (o el nombre del paquete, para metodos declase) como primer argumento
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
PaquetesModulosObjetos
Estructura de la herencia
I El arreglo @ISA de la clase contiene los nombres de lasclases base. Busqueda de metodos es en profundidad, dederecha a izquierda.
I Toda clase hereda de UNIVERSAL
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
PaquetesModulosObjetos
Sintaxis de llamadas
$mage = Wizard−>summon( ” Gandalf ” ) ; # Metodo de clase$mage−>speak ( ” f r i e n d ” ) ; # de i n s t a n c i a
$clase = re f ($mage ) ; # Clase a l a que pertenece
$ t r a v e l = $companion eq ” Shadowfax ” ? ” r i d e ” : ” walk ” ;$mage−>$ t r a v e l ( ” seven leagues ” ) ; # Metodo r i d e o walk
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
PaquetesModulosObjetos
Crear objetos
La funcion bless asocia una referencia con un paquete:
$obj = {} ; # Referencia a hash anonimo
bless ( $obj ) ; # En paquete ac tua lbless ( $obj , ” C r i t t e r ” ) ; # En paquete C r i t t e r
Comunmente se usan hashes como almacenamiento de losobjetos, pero puede usarse cualquier tipo de referencia.
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
PaquetesModulosObjetos
Ejemplo de claseDefinicion de la clase
# Clase .pmpackage Clase ;sub new {
my $invocant = s h i f t ;my $class = re f ( $ invocant ) | | $invocant ;my $ s e l f = { @ } ; bless ( $se l f , $c lass ) ;return $ s e l f ;
}sub get name ( ) { ${$ [ 0 ]}{name} ; }
1;
Horst H. von Brand Scripting – Perl
Lenguajes de ScriptingIntroduccion al lenguaje Perl
Detalles del lenguajeOrientacion a objetos en Perl
PaquetesModulosObjetos
Ejemplo de claseUso de la clase
# ! / usr / b in / p e r l
use Clase ;
$obj = Clase−>new(name => ” i n t i ” ) ;
pr in t $obj−>get name , ” \n ” ;
Horst H. von Brand Scripting – Perl