Sunteți pe pagina 1din 10

1. INTRODUCCIN. 1.1 Descripcin. 1.2 Donde Conseguirlo. 1.1 Descripcin.

Perl es un lenguaje hecho especialmente para escanear archivos de texto, extraer informacin de esos archivos, e imprimir reportes basados en esa informacin. Es tambin un lenguaje muy til para muchas tareas de administracin de sistemas. Este lenguaje combina algunas de las mejores caractersticas de C, sed, awk, y sh. A diferencia de la mayora de las utilidades de UNIX, Perl no limita arbitrariamente el tamao de los datos (Si se tiene la suficiente memoria, Perl puede manejar el archivo entero como un solo string). Y las tablas de hash usadas por los arreglos asociativos crecen lo suficiente para prevenir que se degrade el desempeo. Perl utiliza tcnicas sofisticadas para encontrar patrones lo que le permite escanear grandes cantidades de datos rpidamente. Aunque el Perl est optimizado para escanear texto, puede tambin trabajar con datos binarios, y puede hacer que archivos dbm se vean como arreglos asociativos. 1.2 Donde Conseguirlo. El Perl es gratis , y se puede conseguir de : Cualquier almacn de software de comp.sources.unix. Algunos famosos servers de almacn de archivos : - uunet.uu.net 192.48.96.2 - tut.cis.ohio-state.edu 128.146.8.60 De su autor Larry Wall - jpl-devvax.jpl.nasa.gov 128.149.1.143 2. TIPOS DE DATOS. Los tipos de datos bsicos son : + Escalares. + Arreglos indexados de Escalares. + Arreglos Asociativos de Escalares. Los escalares pueden ser strings, numricos o booleanos dependiendo del contexto. Valores de 0 (cero) y '' (null string) son falsos; cualquier otra cosa es verdadera. Los tipos de variables son determinados por la anteposicin de un caracter especial. $ Escalar. @ Arreglo Indexado. % Arreglo Asociativo. & Funcin. Todos los tipos de datos tienen su propio nombre, as como las etiquetas, funciones, archivos y manejadores de directorios. 2.1 Escalares. Se utiliza un $ para indicar un valor escalar. $foo = 3.141592; $foo = 'rojo'; $foo = "era $foo antes"; $host = `hostname`; # variable interpolada. # se usan backticks ``.

($foo, $bar, $glarch) = ('rojo', 'azul', 'verde'); ($foo, $bar) = ($bar, $foo) # intercambio 2.1.1 Variables Escalares Especiales. Los Escalares Especiales son llamados con signos de puntuacin (excepto $0). Algunos ejemplos son : $0 Nombre del script que se est ejecutando actualmente. $_ Default para operadores de patrones y E/S implcita. $$ El PID actual. $! El mensaje de error actual del sistema (de errno).

$? Estatus del ltimo `backtick`, pipe, o sistema. $| Si la salida tiene buffer. $. El nmero de la lnea actual de la ltima entrada. $[ Arreglo base, por default es 0, awk usa 1. $< El UID real del proceso. $( El GID real del proceso. $> El UID efectivo del proceso. $) El GID efectivo del proceso. 2.2 Arreglos. 2.2.1 Arreglos Indexados (Listas). $ Para un elemento escalar. @ Para todos. $foo[$i+2] = 3; # Establecer un elemento con el valor 3. @foo = ( 1, 3, 5 ); @foo = ( ); @foo = @bar; # Inicializar todo el arreglo. # Inicializa un arreglo vaco. # copiar todo el arreglo.

@foo = @bar[$i..$i+5]; # copiar una parte del arreglo. $#ARRAY es el ndice de el ms alto subscript, cuyo nombre de script es $0 y sus argumentos corren de $ARGV[0] hasta $ARGV[$#ARGV], inclusive. 2.2.2 Arreglos Asociativos (hashed). $ Para un elemento escalar. % Para todos. $ranas{'verdes'} += 23; # 23 o ms ranas verdes. $location{$x, $y, $z} = 'troll';# Arreglo multi-dimensional. %foo = %bar; # Copiar todo el arreglo.

@ranas{'verdes', 'azules', 'amarillas'} = (3, 6, 9); 2.2.3 Variables Especiales de Arreglos. @ARGV Argumentos de la lnea de comandos. @INC Buscar el path para archivos llamados con do. @_ Default para los parmetros de subrutinas y split. %ENV El ambiente actual; por ejm.: $ENV['Tutoriales'] %SIG Usado para sealar manejadores. sub trapped { print STDERR "Interrupted\007\n";

exit 1; } $SIG{'INT'} = 'trapped'; 2.3 Operadores. Perl utiliza todos los operadores de C, excepto para type casting , `$' y `*' como operadores de direcciones, adems de : + Exponenciacin **, **= + Operador de Rango .. $inheader = 1 if /^From / .. /^$/ ;

if (1..10) { do foo( ) ; }

for $i (60..75) { do foo($i); } @new = @old[30..50]; + Concatenacin de Strings . , .= $x = $y . &frob(@list) . $z; $x .= "\n"; + Repeticin de Strings x, x= $bar = '-' x 72; + Comparacin de Strings eq, en, lt, gt, le, ge if ($x eq 'foo') { } if ($x ge 'red') { }

# rengln de 72 guiones.

+ Operadores de Comparacin de archivos como /bin/test aumentados trabajan sobre strings o manejadores de archivos. if (-e $archivo) { } # El archivo existe. if (-z $archivo) { } if (-O LOG) { } # Longitud cero. # LOG propio de un UID real.

die "$archivo no es archivo de texto" unless -T $archivo; 3. CONTROL DE FLUJO. + A diferencia de C , bloques siempre requieren que se encierren entre corchetes { }. + Unless y Until son slo if y while negados. if (EXPR) BLOQUE else BLOQUE if (EXPR) BLOQUE elseif (EXPR) BLOQUE else BLOQUE

while (EXPR) BLOQUE do BLOQUE while EXPR

for (EXPR; EXPR; EXPR) BLOQUE foreach $VAR (LIST) BLOQUE + redo comienza la iteracin actual, ignorando la prueba de loop. + do toma 3 formas : - ejecutar un bloque. do { $x += $a[$i++] } until $i > $j; - ejecutar una subrutina. do foo($x, $y);

- ejecutar un archivo en el contexto actual. do 'subroutines.pl'; 4. EXPRESIONES REGULARES. + Entiende egrep regexps, adems de : \w , \W suma alfanumrica _ (y negacin). \d, \D \s, \S dgitos (y negacin). espacio en blanco (y negacin).

\b, \B lmites de palabras (y negacin). + Reconoce escapes estilo C, como \t, \n, \034 . + Posee caracteres con significado especial, como : ( ) | { } + + Variables especiales : $& todo el texto encontrado. $` $' texto antes del encontrado. texto despus del reconocido.

+ Se utiliza \1 .. \9 dentro de rexprs; $1 .. $9 fuera de rexprs. if (/^este (rojo|azul|verde) (bat|pelota) es \1/) { ($color, $objeto) = ($1, $2); } ($color, $objeto) = /^este (rojo|azul|verde) (bat|pelota) es \1/;

+ Operadores de Sustitucin y Translacin son como la s e y de sed. s/alfa/beta/; s/(.)\1/$1/g;

y/A-Z/a-z/; + Se usa =~ y !~ para encontrar variables. if ($foo !~ /^\w+$/) {exit 1;} $foo = ~ s/\btexas\b/TX/i; 5. ENTRADA/SALIDA. Los manejadores de archivos tienen su propio nombre caracterstico, que generalmente estn en maysculas para evitar confusiones. Los manejadores de archivos predefinidos son : STDIN STDOUT STDERR Mencionar un manejador de archivo entre los smbolos < y > hace que se lea la siguiente lnea si se est trabajando con un escalar, todas las lneas si se trabaja con un arreglo; las lneas nuevas se dejan intactas. $linea = ; @lineas = ; < > significa TODOS los archivos que se proporcionan en la lnea de comandos ( o en STDIN si no hay ninguno). Al usarlo de esta manera, $ARGV es el nombre de archivo actual. Al usarlo en un ciclo WHILE, las lneas de entrada son automticamente asignadas a la variable $_ .

Generalmente se itera un archivo manejando una sola lnea a la vez, asignando a $_ cada vez y usndolo como operando default. while ( < > ) { next if /^#/ ; s/bueno/malo/g ; print; } Si no se usa el pseudo-archivo < >, se abre un manejador de archivos : open (PWD, "/etc/passwd"); open (TMP, open (LOG, open (TOPIPE, "| lpr"); open (FROMPIPE, "/usr/etc/netstat -a |"); ">/tmp/foobar.$$"); ">>logfile"); # Saltarse los comentarios # Sustituto global # Imprime $_

Se puede tambin utilizar getc para E/S de un caracter y read para E/S cruda. Se tiene acceso a llamadas eof, seek, close, flock, ioctl, fcntl y select para usarlas con MANEJADORES DE ARCHIVOS. Se tiene acceso a llamadas mkdir, rmdir, chmod, chown, link, symlink, stat, rename y unlink para usarlas con NOMBRES DE ARCHIVOS. Se puede pasar un manejador de archivo como parmetro para printf a menos que se quiera imprimir a STDOUT. printf LOG "%-8s %s : bits raros : %08x \n", $program, &ctime, $bits ; Se pueden ligar arreglos asociativos a archivos dbm con dbmopen( ). 6. FUNCIONES DEL SISTEMA. Se proporcionan muchas funciones de las libreras de C, incluyendo muchas de las llamadas al sistema. Entre estas se encuentran : chdir chroot exec exit fork getlogin getpgrp getppid kill setpgrp setpriority sleep syscall system times umask wait Si su sistema posee una red tipo Berkeley entonces tambin estn disponibles : bind connect send getsockname getsockopt recv getpeername listen socket socketpair getpw* getgr* gethost* getnet* getserv* getproto* pack y unpack pueden ser usados para manipular datos binarios. Existen 3 mtodos para accesar directorios : + Se puede redireccionar de /bin/ls as : open (FILES,"/bin/ls *.c |"); while ($file = ) { chop($file); ... } + Utilizando las rutinas de lectura de directorios que posee Perl como : opendir, readdir, closedir, seekdir, telldir, y rewinddir.

+ La manera ms fcil es usar la notacin global de Perl. Un string contenido dentro de corchetes agudos ( < > ) conteniendo meta-caracteres del shell, genera una lista de nombres de archivos que concuerden. foreach $x ( <*.[ch]> ) { rename ($x, "$x.old"); } chmod 0644, <*.c>; 8. SUBRUTINAS. Las subrutinas son llamadas con el operador `do' o con `&'. Cualquiera de los tres tipos de datos principales puede ser pasador como parmetro o usado como un valor de salida. do foo(1.43); do foo(@lista); $x = &foo('red', 3, @others); @lista = &foo(@otralista); %foo = &foo($foo, @foo); Los parmetros son recibidos por la subrutina en el arreglo especial @_. Si se desea, estos pueden ser copiados a varaibles locales. Esto es especialmente til en subrutinas recursivas. $result = &simple ($alpha, $beta, $todo); sub simple { local($x, $y, @lodemas ) = @_; local($sum, %seen); return $sum; }

Las subrutinas pueden ser llamadas indirectamente : $foo = 'alguna_rutina'; do $foo(@list); ($x, $y, $z) = do $foo(%maps); 9. E/S FORMATEADA. Adems de printf, se puede realizar E/S formateada con los comandos format y write. Se puede generar paginacin automtica e imprimir encabezados. Las siguientes variables escalares especiales son tiles : $% Nmero de pgina actual. $= $Longitud de pgina actual (default 60). Las lneas que quedan en la pgina.

Ejemplo de E/S formateada : # Un reporte tomado de una forma de reporte de fallas; de # una pgina del manual de Perl. Reporte de Fallas

@<<<<<<<<<<<<<<<<<<<<<<< $system, $%,

@|||

@>>>>>>>>>>>>>>>>>>>>>>>

$date

-----------------------------------------------------------------.

format STDOUT = Subject: @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< $subject Index: @<<<<<<<<<<<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<< $index, $description

Priority: @<<<<<<<<<< Date: @<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<< $priority, $date, $description

From: @<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<< $from, $description

Assigned to: @<<<<<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<< $programmer, ~ $description ^<<<<<<<<<<<<<<<<<<<<<<<<<<<< $description ~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<< $description ~ ^<<<<<<<<<<<<<<<<<<<<<<<... $description . 10. FUNCIONES DE ARREGLOS INCLUIDAS. Los arreglos indexados funcionan como listas; se pueden aadir elementos o quitarlos de cualquier extremo usando las siguientes funciones : pop quita el ltimo valor del final del arreglo. push shift unshift Por ejemplo : push (@list, $bar); push(@list, @rest); aade valores al final del arreglo. quita el primer valor al comienzo del arreglo. aade un valor al comienzo del arreglo.

$tos = pop(@list); while ( $arg = shift(@ARGV) ) { } unshift ( @ARGV, 'zeroth arg', 'first arg'); + split rompe un string en un arreglo de nuevos strings. Se pueden dividir en expresiones regulares arbitrarias, limitar el nmero de campos que se dividi, y guardar los delimitadores. @list = split(/[, \t]+/, $expr); while () { ($login, $passwd, $uid, $gid, $gcos, $Tutoriales, $shell) = split(/:/); } + El comando inverso de split es join : $line = join(':', $login, $passwd, $uid,$gid, $gcos, $Tutoriales, $shell); + reverse : invierte una lista. foreach $tick (reverse 0 .. 10) { } + sort : regresa un nuevo arreglo con los elementos ordenados de acuerdo a sus valores ASCII. print sort @list sub numerically { $a - $b ; } print sort numerically @list; + grep : regresa una nueva lista conteniendo todos los elementos para los cuales resulta verdadera alguna expresin. Por ejemplo, esto borrar todas las lneas que tengan como primer caracter un # : @lines = grep(!/^#/, @lines); Para manejar arreglos asociativos, las funciones key y value regresan arreglos indexados de los ndices y valores respectivamente. Cada uno es usado para iterar a travs de un arreglo asociativo para obtener un par ($key,$value) cada vez. while (($key,$value) = each %array) { printf "%s is %s\n", $key, $value; } foreach $key (keys %array) {

printf "%s is %s\n", $key, $array{$key}; } print reverse sort values %array 11. FUNCIONES STRING. Aparte de las poderosas expresiones regulares, se incluyen algunas funciones de manipulacin de strings de C , incluyendo : crypt index rindex length substr sprintf

La funcin chop remueve eficientemente el ltimo caracter de un string. Es usado normalmente para borrar el caracter de lnea nueva en lneas de entrada. Como muchos operadores de Perl, trabaja sobre $_ cuando no se especifica ningn operador. chop($line); chop($host = `hostname`); while() { chop ; ... }

El operador eval permite ejecutar cdigo generado dinmicamente. Por ejemplo, para procesar cualquier argumento de la lnea de comandos, de la forma variable=valor, coloque esto al principio de su script : eval '$'.$1."'$2';" while $ARGV[0] = ~ /^([A-Za-z_]+=) (.*)/ && shift; El operador eval es tambin til para hacer pruebas durante la ejecucin de caractersticas dependientes del sistema, que de otra forma generaran errores fatales. Por ejemplo, no todos los sistemas soportan symlink o dbmopen; se puede probar su existencia ejecutando los comandos dentro de un eval y probando la variable especial $@, que contiene el texto del error de tiempo de corrida que se pudo haber generado. 12. SCRIPTS SUID'S. Los programas hechos en Perl pueden ser configurados para correr setuid, y pueden ser ms seguros que el programa correspondiente en C. Debido a que los intrpretes no tienen la garanta de que el nombre de archivo que obtienen como primer argumento sea el mismo archivo que fue ejecutado, perl no permitir correr un script setuid en un sistema donde los scripts setuid estn habilitados Usando un mecanismo de deteccin de flujo de datos activado por la ejecucin de un setuid, perl puede determinar que datos son seguros de usar y que datos provienen de una fuente externa y pueden no ser seguros. Datos "inseguros" no pueden ser usados directamente o indirectamente en cualquier comando que modifique archivos, directorios o procesos , generando un error fatal de tiempo de corrida. 13. DEPURACIN Y PAQUETES. Cuando se invoca el switch -d, perl corre el programa bajo un depurador simblico (escrito en perl) algo parecido en sintaxis al sdb. Entre otras cosas, se pueden colocar Breakpoints, examinar o cambiar variables e imprimir llamadas anteriores a subrutinas. Debido a que utiliza eval sobre el cdigo, se puede ejecutar cualquier cdigo de perl desde el depurador. Usando paquetes, se pueden escribir mdulos con nombres separados para evitar conflictos de nombres en las rutinas de las libreras. El depurador utiliza esto para para mantener sus variables separadas de las del programador. Las variables son accesadas por medio de la notacin del paquete como en esta linea del depurador : $DB'stop[$DB'line] =~ s/;9$//;

14. OPCIONES DE LA LINEA DE COMANDOS. Las siguientes son los switches ms importantes de la lnea de comandos reconocidos por perl : -v Imprime el string de la versin. -w Da avisos sobre construcciones con errores. -d Corre un script bajo el depurador. -e Como sed : usado para proporcionar lneas con un slo comando. -n Se cicla en torno a la entrada como sed -n. -p Lo mismo que -n, pero imprime cada lnea. -i Editar archivos. -a Comenzar el modo autosplit (como awk) dentro del arreglo @F. -P Llamar el preprocesador de C en el Script. Ejemplos de la Lnea de Comandos : # Ver la versin actual. perl -v

# El programa ms simple en perl. perl -e 'print "hello, world.\n";'

# Util al final de "find foo -print" perl -n -e 'chop;unlink;'

# aade la primera y ltima columnas (filtro). perl -a -n -e 'print $F[0] + $F[$#F], "\n";'

# edicin de todos los archivo *.c cambiando foo por bar. perl -p -i -e 's/\bfoo\b/bar/g;' *.c

# corre un script bajo el depurador. perl -d myscript

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