Professional Documents
Culture Documents
III - Lenguajes de Scripting - Perl
III - Lenguajes de Scripting - Perl
Lenguajes de Scripting
Perl
Departamento de Informática
Universidad Técnica Federico Santa Marı́a
Contenido
Lenguajes de Scripting
Introducción al lenguaje Perl
Detalles del lenguaje
Tipos de datos
Contextos
Operadores
Estructuras de control
Funciones predefinidas
Expresiones regulares
Subrutinas
Estructuras de datos y referencias
Orientación a objetos en Perl
Paquetes Horst H. von Brand Scripting – Perl
Lenguajes de Scripting
Introducción al lenguaje Perl
Detalles del lenguaje
Orientación a objetos en Perl
I “Script” es guión
I Invocar programas automáticamente
I Lenguajes interpretados
I Muy alto nivel
I Caracterı́sticas generales
I Manejo de strings y expresiones regulares
I Sin tipos, variables no se declaran
I Administración automática de memoria
I Caracterı́sticas adicionales
I Empotrable: Puede usarse desde dentro de programas
I Extensible: Pueden agregarse nuevas funcionalidades
Algunos lenguajes
Perl
Lı́nea de comandos
Lı́nea de comandos
Ejemplos simples
Contar lı́neas, palabras, caracteres
# ! / usr / bin / p e r l
while (<>) {
$ l i n e s ++;
$words += s p l i t ;
$chars += length ;
}
p r i n t ” $ l i n e s $words $chars \n ” ;
Ejemplos simples
Contar lı́neas, palabras, caracteres – versión “completa”
# ! / u s r / b i n / p e r l −w
use s t r i c t ;
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 ) ;
}
p r i n t STDOUT ” $ l i n e s $words $chars \n ” ;
Ejemplos simples
Referencias cruzadas
# ! / usr / bin / p e r l
while (<>) {
foreach $w ( s p l i t ( / \W+ / ) ) {
i f ( ! defined ( $ r {$w } ) ) {
$ r {$w} = $ . ;
} else {
$ r {$w} . = ” , $ . ” unless $ r {$w} =˜ / $ . / ;
}
}
}
foreach $w ( s o r t keys %r ) {
p r i n t ” $w : $ r {$w}\n ” i f $w ;
} Horst H. von Brand Scripting – Perl
Lenguajes de Scripting
Introducción al lenguaje Perl
Detalles del lenguaje
Orientación a objetos en Perl
Ejemplos simples
Entrada y salida
# ! / usr / bin / p e r l
open ( IN , ”< i n p u t ” ) ; chomp( @ l i s t = <IN > ) ; close ( IN ) ;
Constantes numéricas
I Decimal: 100
I Para legibilidad: 1 000
I Decimales: 3.141592
I Con exponente: 6.024e24
I Octal: 0277
I Hexadecimal: 0x3ff
I Binario: 0b1010 0011
Escapes en strings
Código Acción
”\u” Siguiente es mayúscula (titlecase)
”\l ” Siguiente es minúscula
”\U” Mayúsculas
”\L” Minúsculas
”\Q” Backslash antes de no-alfanuméricos
”\E” Fin de ”\U”, ”\L”, ”\Q”
Contextos
Valores de verdad
Operadores
Comparaciones
Estructuras de control
i f ( CONDITION ) {
...
}
e l s i f ( CONDITION ) {
...
}
else {
...
}
unless ( CONDITION ) {
...
}
Horst H. von Brand Scripting – Perl
Tipos de datos
Contextos
Lenguajes de Scripting Operadores
Introducción al lenguaje Perl Estructuras de control
Detalles del lenguaje Funciones predefinidas
Orientación a objetos en Perl Expresiones regulares
Subrutinas
Estructuras de datos y referencias
Estructuras de control
while ( CONDITION ) {
...
last ;
...
next ;
...
} continue {
...
}
Estructuras de control
u n t i l ( CONDITION ) {
...
last ;
...
next ;
...
} continue {
...
}
Estructuras de control
f o r ( I N I T ; CONDITION ; UPDATE) {
...
next ;
...
last ;
...
}
Estructuras de control
Modificadores
... i f ( CONDITION ) ;
. . . unless ( CONDITION ) ;
. . . while ( CONDITION ) ;
. . . u n t i l ( CONDITION ) ;
. . . foreach LIST ;
Modificadores
do {
...
} while ( CONDITION ) ;
do {
...
} u n t i l ( CONDITION ) ;
Rótulos de ciclos
LABEL : {
...
next LABEL ;
...
l a s t LABEL ;
...
}
Funciones predefinidas
Manejo de arreglos como deque
Funciones predefinidas
Combinar/dividir strings
Funciones predefinidas
Manipulación de arreglos
Funciones predefinidas
Manipulación de strings
I lc EXPR, uc EXPR
I lcfirst EXPR, ucfirst EXPR
Funciones predefinidas
Otras clases
I Manipulación de procesos
I Hebras (threads)
I Numéricas
I Llamadas propias de U NIX
Un ejemplo de uso
Datos
HERNANDEZ:GOMEZ:LUIS:234567-8
IN:OUT:GIGO:891234-6
LI:CHIANG:DANIEL ALBERTO:345678-9
NOGUERA:NORAMBUENA:NELLY NORA:987654-3
PEREZ:LOPEZ:JUAN PABLO:123456-7
SALGADO:NARDEZ:JOSEFO LUIS ALBERTO JAVIER:456789-K
ZAMORA:YUMA:ADAN BENJAMIN CARLOS DAVID:132547-6
Un ejemplo de uso
Salida deseada
Un ejemplo de uso
El programa
# ! / usr / bin / p e r l
open (OUT, ” | s o r t ” ) ;
while (<>) {
chomp ;
@a = map { j o i n ’ ’ , map { u c f i r s t l c } s p l i t }
split / : / ;
p r i n t OUT ” \U$a [ 3 ] : ” , j o i n ( ’ ’ , @a[ 2 , 0 , 1 ] ) ,
” \n ” ;
}
close (OUT ) ;
Referencias cruzadas
Una versión más sofisticada
# ! / usr / bin / p e r l
while (<>) {
foreach ( s p l i t / \W+ / ) {
/ ˆ $ / and next ;
$ref {$ } .= $ref {$ } ? ” , $ . ” : $ .
unless $ r e f { $ } =˜ / $ . / ;
}
}
p r i n t map ” $ : $ r e f { $ }\n ” , s o r t keys %r e f ;
Operadores especiales
Común Gral Int Significa
’ ... ’ q {...} No String
” ... ” qq{...} Si String
‘...‘ qx{...} Si Comando
qw{...} No Palabras
/.../ m{...}imosx Si Calza patrón
qr {...} imosx Si Patrón
s {...}{...} egimosx Si Reemplazo
tr {...}{...} cds No Transliterar
Los delimitadores pueden ser “cualquier cosa”. Paréntesis
deben parearse.
Horst H. von Brand Scripting – Perl
Tipos de datos
Contextos
Lenguajes de Scripting Operadores
Introducción al lenguaje Perl Estructuras de control
Detalles del lenguaje Funciones predefinidas
Orientación a objetos en Perl Expresiones regulares
Subrutinas
Estructuras de datos y referencias
Operadores especiales
Calce de patrón
Operadores especiales
Reemplazo
En s /.../.../ egimosx:
e Lado derecho es expresión
g Globalmente
i No distinga mayúsculas/minúsculas
m Múltiples lı́neas
o Compilar una sola vez (once)
s Una sola lı́nea
x Expresiones regulares extendidas
Operadores especiales
Transliterar
En tr /BUSCA/REEMPLAZO/cds:
c Complemento
d Elimine los sin traducción
s 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’
Expresiones regulares
Expresiones regulares
Expresiones regulares
Expresiones regulares
Caracteres individuales
Expresiones regulares
Caracteres individuales
Expresiones regulares
Operadores
Expresiones regulares
Anchors
Expresiones regulares
Anchors
Búsquedas y reemplazos
Subutinas
Un ejemplo simple
# ! / usr / bin / p e r l
sub Ul
{
my $x = s h i f t ;
r e t u r n u c f i r s t l c $x ;
}
while (<>) {
p r i n t Ul $ ;
}
Subrutinas
Manejo de arreglos
# ! / usr / bin / p e r l
sub acc
{
my $s ;
foreach (@ ) {$s += $ ; $ = $s ; }
return @ ;
}
$ Escalar
@ Arreglo
\@ Referencia a arreglo
\% Referencia a hash
& Bloque
∗ Glob
\[$@] Escalar o arreglo
\ %;$ Referencia a hash, escalar opcional
Múltiples dimensiones
Objetos anónimos
Un ejemplo extraño
# ! / usr / bin / p e r l
$a [ 0 ] = [ 0 , 1 , 2 ] ; $a [ 0 ] [ 3 ] = 3 ; push @{$a [ 0 ] } , 4 , 5 ;
$a [ 2 ] = sub {map $ ∗ 3 , @ };
Paquetes
# ! / usr / bin / p e r l
package Saludos ;
$Despedida = ” Chao . . . ” ;
$ h i = ” Hola ! ” ;
sub bye ( ) { $Despedida ; }
package main ;
p r i n t $Saludos : : h i . ” \n ” ;
p r i n t Saludos : : bye ( ) . ” \n ” ;
Módulos
El usuario
# ! / usr / bin / p e r l
use Modulo ;
p r i n t f u n c @ARGV;
p r i n t ” \n ” ;
Módulos
El módulo mismo
# Modulo .pm
package Module ;
BEGIN {
use E x p o r t e r ( ) ;
our ( $VERSION , @ISA,
@EXPORT, @EXPORT OK, % EXPORT TAGS ) ;
@ISA = qw( E x p o r t e r ) ;
@EXPORT = qw(& f u n c ) ;
}
sub f u n c { ” | ” . ( j o i n ’ : ’ , @ ) . ” | ” ; }
Objetos en Perl
Estructura de la herencia
Sintaxis de llamadas
Crear objetos
bless ( $ o b j ) ; # En paquete a c t u a l
bless ( $obj , ” C r i t t e r ” ) ; # En paquete C r i t t e r
Comúnmente se usan hashes como almacenamiento de los
objetos, pero puede usarse cualquier tipo de referencia.
Ejemplo de clase
Definición de la clase
# Clase .pm
package Clase ;
sub new {
my $ i n v o c a n t = s h i f t ;
my $ c l a s s = r e f ( $ i n v o c a n t ) | | $ i n v o c a n t ;
my $ s e l f = { @ } ; bless ( $ s e l f , $ c l a s s ) ;
return $ s e l f ;
}
sub get name ( ) { ${ $ [ 0 ] } { name } ; }
1;
Ejemplo de clase
Uso de la clase
# ! / usr / bin / p e r l
use Clase ;
p r i n t $obj−>get name , ” \n ” ;