Lenguaje PERL - Carreras de Sistemas - UARG
Transcripción
Lenguaje PERL - Carreras de Sistemas - UARG
! Docente: Albert A. Osiris Sofía 1º Cuatrimestre 2002 1 & Bases de Datos – Analista de Sistemas – Unidad Académica Río Gallegos Lenguaje PERL Bases de Datos – Analista de Sistemas – Unidad Académica Río Gallegos 2 1 Contenido de la Presentación ! • Lenguaje Perl 3 & Bases de Datos – Analista de Sistemas – Unidad Académica Río Gallegos Programación CGI usando Perl Bases de Datos – Analista de Sistemas – Unidad Académica Río Gallegos 2 Contenidos Breve introducción a Perl Técnicas útiles Ejemplo CGI ! Links Bases de Datos – Analista de Sistemas – Unidad Académica Río Gallegos Perl & ¾Perl es un lenguaje de programación de alto nivel ¾Ventajas: –Desarrollo rápido (lenguaje interpretado) –Lenguaje portable entre plataformas (Unix, Linux, Windows, etc). –Ejecución más rápida que la de los scripts –Existen numerosas librerias gratuitas (desarrollo colaborativo) Bases de Datos – Analista de Sistemas – Unidad Académica Río Gallegos 3 Ventajas (II) Lenguaje de entrada y salida práctico Mezcla entre C y Shell Scripts Ejecución secuencial de sentencias No existe el concepto de rutina principal ! • • • • 7 Bases de Datos – Analista de Sistemas – Unidad Académica Río Gallegos Características Principales & 1. Expresiones regulares básicas (regex) Las regex de Perl tiene el siguiente formato: $nombre=~/Pedro/ Lo cual significa que si el texto “Pedro” se encuentra dentro de $nombre, se devuelve el valor TRUE Bases de Datos – Analista de Sistemas – Unidad Académica Río Gallegos 4 Ejemplo $_='Mi email es <[email protected]>.'; /(<robert\@netcat.co.uk>)/i; print “Encontrado ! $1\n"; ! Salida: Encontrado ! <[email protected]> Bases de Datos – Analista de Sistemas – Unidad Académica Río Gallegos Split (desdoblamiento) & $_='Piper:PA-28:Archer:OO-ROB:Antwerp'; @details=split /:/, $_, 3; foreach (@details) { print "$_\n"; } Salida: Piper PA-28 Archer:OO-ROB:Antwerp Bases de Datos – Analista de Sistemas – Unidad Académica Río Gallegos 5 Operación con Archivos $archivo="c:\scripts\archivo.txt"; open STUFF, $archivo; ! while (<STUFF>) { print "Linea numero $. is : $_"; } Bases de Datos – Analista de Sistemas – Unidad Académica Río Gallegos Ejemplos & @ARGV="c:/scripts/salida.txt"; $^I=".bk"; while (<>) { tr/A-Z/a-z/; print; } Bases de Datos – Analista de Sistemas – Unidad Académica Río Gallegos 6 Arrays Asociativos %myhash Key Value ES Spain BE Belgium DE Germany ! @myarray Vs Index Value 0 Spain 1 Belgium 2 Germany Bases de Datos – Analista de Sistemas – Unidad Académica Río Gallegos Ejemplo & %paises=('NL','The Net herlands', 'BE', 'Belgium', 'DE','Germany','MC','Monaco','ES','Spai n'); print “Ingrese el código de país:"; chop ($encontrar=<STDIN>); $encontrar=~tr/a-z/A-Z/; print "$paises{$encontrar} tiene código $encontrar\n"; Bases de Datos – Analista de Sistemas – Unidad Académica Río Gallegos 7 Ejemplo CGI Web Server (Web Professional) query the databa and get the resu 2. Database Oracle 8 changetheresultstoHTMLformat 4 3 2 form requested by learner Query template+Code .... HTML form .... login.pl vc_ i ndex.html Scripts bP ag e vc 1. Request server/ http://pc89075.cse.cuhk.edu/ vc_index.html _in de x.h Ac tm / i n tio l p u n =l o t l "g og in 4. i n . "p l Re da su lt P ta ag e 3. passing CGI strings to script and activate it Disk Network We Documents ! Learner/brows Bases de Datos – Analista de Sistemas – Unidad Académica Río Gallegos Archivos HTML y Perl & <html> <head>... </head> <body>... <form method="POST" action="/cgi-v c/login_2.pl"> <input type="passw ord" name="password">... </form> </html> read (STDIN, $login_raw , $ENV{'CONTENT_LENGTH'}); %logindata=split (/[&=]/, $login_raw ); foreach (keys %logindata) { $logindata{$_}=~s/%([\dA-Faf]{2})/chr(hex $1)/ge; $logindata{$_}=~s/\+/ /g; } $logid=$logindata{'login'}; $passw d=$logindata{'passw ord'}; ... print "Content-type: text/html\n\n"; print "<html><body>\n"; ... Bases de Datos – Analista de Sistemas – Unidad Académica Río Gallegos 8 Links Sitio oficial de Perl: http://www.perl.org/ Tutorial de Perl: http://www.netcat.co.uk/rob/perl/win32perltut.html ! Ten Perl Myt hs http://www.perl.com/pub ActiveSate Tool Corp. http://www.activestate.com Bases de Datos – Analista de Sistemas – Unidad Académica Río Gallegos & Detalles de la Programación PERL Bases de Datos – Analista de Sistemas – Unidad Académica Río Gallegos 18 9 Generalidades Tipos de Datos Principios de I/O. Operadores lógicos y aritméticos Expresiones regulares Sentencias de control de flujo Funciones predefinidas ! • • • • • • 19 Bases de Datos – Analista de Sistemas – Unidad Académica Río Gallegos Tipos de Datos & • 3 tipos de datos básicos – Escalares. – Array indizado de escalares – Arrays asociados de escalares (hashes). • Los escalares pueden ser numéricos, tipos string o booleanos • No es necesario definir el tipo para una variable Bases de Datos – Analista de Sistemas – Unidad Académica Río Gallegos 20 10 Tipos de Datos (II) • El tipo de datos se indica mediante un caracter especial – – – – $ para escalares. @ para arrays indexados. % para arrays asociativos (hashes). & para funciones. ! • Cada tipo de datos posee su propio espacio de nombres 21 Bases de Datos – Analista de Sistemas – Unidad Académica Río Gallegos Literales Numéricos & • Existen diversas formas: $a = 515 $b = 2.5 $c = 2.5E15 $d = 0x5A25 $e = 0555 $f = 5_255_515 #enteros #punto flotante #notacion científica #hexadecimal #octal #para legibilidad Bases de Datos – Analista de Sistemas – Unidad Académica Río Gallegos 22 11 Literales String • 2 tipos: – “…” para interpolación de variables – ‘…’ para strings fijos • `…` usado para ejecutar un shell script y obtener su resultado. • Ejemplo: ! $animal = ‘tigre’; $message = “Salve al $animal”; $message = ‘Salve al $animal’; $fecha = ‘date’; 23 Bases de Datos – Analista de Sistemas – Unidad Académica Río Gallegos Variables Escalares & • No se requiere una definición o inicialización especial. • La interpretación como número o string depende del contexto • Los operadores brindan el contexto para esa interpretación Ej. $num = “123”; print $num + 3, “\n”, $num, “\n”; Bases de Datos – Analista de Sistemas – Unidad Académica Río Gallegos 24 12 Arrays Indexados • Lista de escalares Ej. @marks indica el array completo ! • Los índices comienzan en 0. • $marks[1] es el 2º elemento del array. • $#marks devuelve el número de el ementos del array. • array variables especiales: @ARGV, @INC 25 Bases de Datos – Analista de Sistemas – Unidad Académica Río Gallegos Arrays Indexados - Ejemplos & • Ejemplos: @marks = (45,55,65 ); #inicializa array @marks = ( ); #inicializa array @foo = @bar; #copia array @foo = @bar[2..5] #copia subarray ($x,$y,$z) = @games; #asigna valores a variables ($alp,$beta) = ($beta, $alp); #intercambia valores Bases de Datos – Analista de Sistemas – Unidad Académica Río Gallegos 26 13 Arrays Asociativos - Hashes • Pares de claves-valores no ordenados Ej. %esposa indica el hash completo. • El valor se accede usando la clave asociada ! Ej. %esposa = { ‘amitabh’,’jaya’,’rajiv’,’sonia’,’ram’,’sita’} $esposa{’amitabh'} = ‘jaya’; 27 Bases de Datos – Analista de Sistemas – Unidad Académica Río Gallegos Hashes (II) & • Las funciones keys & values devuelven arrays indexados de los indices y los valores respectivamente • El operador each se usa para iterar a través del hash para recuperar un par de valores cada vez • Array hash especial : %ENV eg. $ENV{‘PATH’} = “/user/home/xyz” Bases de Datos – Analista de Sistemas – Unidad Académica Río Gallegos 28 14 Gestión de Archivos ! • Nombre de variable usada para acceder a un archivo o dispositivo • Se accede a un archivo utilizando la función open • El tipo de acceso se puede especificar en la función open • Manejadores predefinidos: STDIN, STDOUT, STDERR. 29 Bases de Datos – Analista de Sistemas – Unidad Académica Río Gallegos Ejemplos de Manejadores de Archivo & • Ejemplo: open( FILEHANDLE, “archivo”); “< archivo” read mode “> archivo” write mode “>> archivo” append mode “| archivo” O/P pipe “archivo |” I/P pipe Bases de Datos – Analista de Sistemas – Unidad Académica Río Gallegos 30 15 Principios de I/O • Entrada desde Manejadores de Archivo – $a = <STDIN>; chomp ($a); # elimina el trailing ‘\n’, si existe – $line = <LOG>; • Entrada desde el operador <> ! – Toma la información desde el archivo especificado en el programa – while (<>) { print $_; } 31 Bases de Datos – Analista de Sistemas – Unidad Académica Río Gallegos Principios de I/O (II) & • Salida a STDOUT - print “Sum = ”, 2+3; printf “%10s %5d\n”, $string, $num; • Salida a otro manejador de archivos print LOG “algun registro”, “\n”; Bases de Datos – Analista de Sistemas – Unidad Académica Río Gallegos 32 16 Operadores • Aritméticos - +, -, *, /, %, **, ++, --, +=, -= etc. • String - Concatenación (.), replicación (x) etc. • Rangos • Bits - ! No-inclusive (..), Inclusive (...) And (&), Or (|), Xor (^), Not (~) 33 Bases de Datos – Analista de Sistemas – Unidad Académica Río Gallegos Operadores Lógicos & • 0, string nulo (“”, ‘’), o ‘0’ es fal se, lo contrario es true booleano. • and (&&), or (||), complemento (!) • Operador If-then-else (?:) ej. $a = condición ? $b : $c; Bases de Datos – Analista de Sistemas – Unidad Académica Río Gallegos 34 17 Operadores de Comparación == != < > <= >= eq ne lt gt le ge ! Equal Not equal Less than Greater than Less than or equal to Greater than or equal to 35 Bases de Datos – Analista de Sistemas – Unidad Académica Río Gallegos Expresiones Regulares & • Coincidencia de patrones while (<>) { if ($_ =~ /abc/) { print $_; } } • Sustitución usando expresiones regulares $var =~ s/abc/def/g; Bases de Datos – Analista de Sistemas – Unidad Académica Río Gallegos 36 18 Expresiones Regulares (II) • Patrones de un único caracter – – – – . [abc] [0-9] ^ : : : : un caracter simple excepto enter un caracter simple de un conjunto cualquier caracter de una clase clase negada • Clases predefinidas: : : clase dígitos clase palabras [a-zA-Z0-9] clase espacios [ \r\t\n\f] ! – \d – \w – \s 37 Bases de Datos – Analista de Sistemas – Unidad Académica Río Gallegos Estructuras de Control & • Bloques de Estructur - delimitados por {}. • El ; final es opcional (por clarificación) • Sentencias de control de flujo – if / unless – while / until – for / foreach Bases de Datos – Analista de Sistemas – Unidad Académica Río Gallegos 38 19 if / unless • Syntaxis (if) – if (EXPR) BLOQUE else BLOQUE – if (EXPR) BLOQUE elsif (EXPR) BLOQUE else BLOQUE ej. if ($num > 100) { print "100 items vend.\n"; } ! • Syntax (unless) - unless (EXPR) BLOQUE ej. unless ($day eq “Domingo") { print “Trabajo"; } 39 Bases de Datos – Analista de Sistemas – Unidad Académica Río Gallegos while / until & • Syntaxis (while) - – while (EXPR) BLOQUE – do BLOQUE while (EXPR) while (@ARGV) { $next = shift @ARGV; } print "next"; • Syntaxis (until) - – until (EXPR) BLOQUE – do BLOQUE until (EXPR) Bases de Datos – Analista de Sistemas – Unidad Académica Río Gallegos 40 20 for / foreach • Syntaxis (for) for (initial EXPR; test EXPR; re-init EXPR) BLOQUE ej. for ($i = 1; $i <=10; $i++) { print $i; } • Syntax (foreach) - ! foreach $i (@lista) BLOQUE ej. foreach $a (@st d_list) { print $a; } 41 Bases de Datos – Analista de Sistemas – Unidad Académica Río Gallegos next, last, redo & • next permite saltar al final de la iteración • last permite saltar al final de un bloque • redo permite saltar al inicio del bloque. Bases de Datos – Analista de Sistemas – Unidad Académica Río Gallegos 42 21 next, last, redo - Ejemplo ! while (condicion_1) { #sentencias if (condicion_2) { #hace algo #next, last, redo van aquí } #mas sentencias } 43 Bases de Datos – Analista de Sistemas – Unidad Académica Río Gallegos Funciones (open, close, die, warn) & • open y close open (LIST, “wordlist.txt”); close (LIST); • die y warn open (LIST, “wordlist.txt”) || die “No se puede”; unless (filename) warn “Archivo vacio”; Bases de Datos – Analista de Sistemas – Unidad Académica Río Gallegos 44 22 Funciones (chop, chomp) • chop - chops eliminan el ultimo caracter de un string $val = “ABCDEFGHIJKLMN”; chop($val); # “ABCDEFGHIJKLM” $val = chop($val); # “M” ! • chomp - removes whatever input record separator $\ is set to. By default it is ‘\n’. $val = <STDIN>; chomp($val); 45 & Bases de Datos – Analista de Sistemas – Unidad Académica Río Gallegos Conclusiones Bases de Datos – Analista de Sistemas – Unidad Académica Río Gallegos 46 23 Conclusiones ! • Perl NO reemplaza a los CGI • Perl complementa la programación de scripts • Permite portabilidad 47 Bases de Datos – Analista de Sistemas – Unidad Académica Río Gallegos Próxima Clase & • Diseño de Bases de Datos Bases de Datos – Analista de Sistemas – Unidad Académica Río Gallegos 48 24 Bases de Datos ! Clase Nº 4 49 & Bases de Datos – Analista de Sistemas – Unidad Académica Río Gallegos 25