introducción a perl verónica jiménez jacinto vjimenez@ibt.unam.mx enero 2010

Post on 23-Jan-2016

227 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Introducción a Perl

Verónica Jiménez Jacintovjimenez@ibt.unam.mx

Enero 2010

Caracteristicas de Perl...● Es un lenguaje de propósito general

originalmente desarrollado para la manipulación de texto y ahora utilizado para un amplio rango de tareas, como administración de sistemas, desarrollo web, programación en red, y más.

● Se previó que fuera práctico.● Sus principales caracterásticas son que

es fácil de usar, y tiene incorporado un poderoso sistema de procesamiento de texto.

La primera linea ...

● La primera linea de un programa en Perl contiene el shebang (par de caracteres que identifica el texto que sigue), que le indica al sistema operativo dónde encontrar el intérprete de Perl.

#!/usr/bin/perl

La instrucción print● Esta instruccion envia información a la

pantalla o a un archivo. :

#!/usr/local/bin/perl

print "Hola Mundo!\n";

print "Esto se escribe en\ndos lineas.\n"; print "Pero esto", "Se escribe en una sola linea.\n";

print '¿Porque aqui no se ejecuta como cambio de linea?.';

Secuencias de escape

● Las siguientes secuencias de escape pueden ser interpretadas en la instrucción print o en la lectura de archivos: \n cambio de linea y retorno de carro \t tabulador horizontal \v tabulador vertical \a bell o beep (campanita)

Tipos de variables● Escalares( scalars). Cualquier cosa: $escalar● Arreglos o vectores o listas (arrays): @arreglo● Tablas asociativas o diccionarios (hashes).

%hash. (TiposVariables.pl)

● Declaración obligatoria con la directiva “my”● use strict;

(TiposVariablesStrict.pl)

Estructuras de control: condicion

if(condicion){~~

~~

} elsif{~~

}else{

~~ ~~ ~~

}

Operadores de comparacion

● Perl tiene 4 importantes operadores, para construir condiciones:

Num interpretación String < ``less than'' lt > ``greater than'' gt == ``equal to'' eq != ``not equal to'' ne <= ``less than or equal to,'' le >= ``greater than or equal to.” ge

Estructuras de control: ciclo while

while(condicion){

}

Estructura de control:ciclo for

● for(<inicio>;<condicion de

paro>;<incremento>)

{bloque }● Ejemplo:

for($i=0;$i<20;$i++) # ejecuta el bloque de código 20 veces

{

print “$i .- Hola”;

}for.pl

foreach $elemento (@arreglo)

# ciclo sobre cada uno de los elementos de un @arreglo

{ # procesa cada $elemento

}

Estructura de control:foreach

Diversión con cadenas...substr

● substr($a,$pos,$num) : Regresa una subcadena de la cadena $a,

desde la posición $pos, considerando $num caracteres. Si $num no es especificado, se considera el fin de la cadena como fin de la subcadena. Ejemplo:

$cadena = "Bienvenidos a Perl!\n";

print substr($a, 0, 11);#"Bienvenidos"

print substr($a, 13); # " a Perl!\n“

SearchString.pl

Trabajando con archivos

● open(FILEHANDLE,"Flatfile.txt"); Abre el archivo Flatfile.txt para leerlo y lo asocia al manejador FILEHANDLE.

● open (OVERWRITE, ">overwrite.txt"); Abre el archivo overwrite.txt para escribir en él y lo asocia al manejador OVERWRITE.

● open (APPEND, ">>append.txt"); Abre el archivo append.txt para agregarle cosas y lo asocia al manejador APPEND.

Vive o muere...

● Que hacer en caso de que archivo no se puede abrir?

open (FILEH, “flatfile.txt”) || die “no se pudo abrir el archivo flatfile.txt\n”;

Operadores Especiales sobre ficheros...

● -r -w -x : comprueba si hay permiso ● -e : comprueba si el archivo exite● -z : comprueba si el archivo tiene tamaño nulo● -s : devuelve el tamaño del archivo● -f -d : comprueban si el archivo es un fichero ó

directorioif(-r 'flatfile.txt')

{

open(FILEHANDLE, “flatfile.txt”)|| die ...

}

Leyendo a traves del archivo...open(MIFICH,"fichero.txt")|| die "No puedo encontrar fichero.txt\n";

while(<MIFICH>) {

print $_; # $_ contiene la línea actual

}

close(MIFICH);

open(LOGFILE,”flatfile.txt”)|| die "no puedo abrir flatfile.txt\n";

$title = <LOGFILE>;

print "Report Title: $title";

for $line (<LOGFILE>) {

print $line;

}

close(LOGFILE);

Escribiendo a traves de archivos...

open(OUTF,“>fichero.txt")|| die "No puedo encontrar fichero.txt\n";

print OUTF “Nuevo contenido del archivo\n”;

close (OUTF);

Expresiones regulares

● La consulta mas sencilla: =~$user_location = "I see thirteen black cats under a

ladder.";

if ($user_location =~ /thirteen/)

{ print "Eek, bad luck!\n"; }

Metacaracteres...● Un patrón está delimitado por dos barras

inclinadas, /patrón/● Los símbolos más habituales en expresiones

regulares son: ● /./ # cualquier carácter excepto \n,(wildcard)● /\s/ # es un espacio en blanco (space) ● /\t/ # es un tabulador ● /\w/ # es un carácter alfanumérico (word),● /\W/ # no es un carácter alfanumérico (word)● /\d/ # es un dígito ● /\D/ # no es un dígito ● /\A/ # es el principio de una cadena ● /\Z/ # es el final de una cadena ● /^/ # es el principio de una línea de archivo ● /$/ # es el final de una línea de archivo

cuantificadores ● Los cuantificadores son:

+ una ó más veces ? cero ó una vez * cero ó más veces {n,m} mínimo y máximo de veces

● Los parentesis se usan: - /(\d\s\w)/ # para agrupar varios símbolos en un

solo patrón

- /(A|B|C)/ # para definir un patrón formado por varias alternativas: coincide con 'A', con 'B' o con 'C‘

- Tambien para guardar la “memoria de lo encontrado”

Ejemplos:● /ab+c/ encuentra “abc”,

“abbc”,”abbbc'' y asi sucesivamente.

● /ab*c/ lo mismo que el anterior, pero con “ac”.

● /^http:.+html$/. Localiza un URL● /\d\d\d-\d\d\d\d/ . Un numero

telefonico● /ATG\w+/ La secuencia de un gen?

Mas ejemplos...

● $string =“ATGTTGCCGCGATCCCGAAA"; $string =~ /(^ATG).+(C{3}).+(A{2,5})/;

@subcadenas = ($1, $2, $3);

● # Ejemplo escrito por Bruno Contreras en Julio de 2005

$RNA = "CAUACUAAGAUCGCGAUAUUAUUAGCGAUAUACGACU"; $stop1 = 'UAA'; $stop2 = 'UGA'; $stop3 = 'UAG'; ($total1,$total2,$total3,$total) = (0,0,0,0); while( $RNA =~ /$stop1/g ) { $total1++; } while( $RNA =~ /$stop2/g ) { $total2++; } while( $RNA =~ /$stop3/g ) { $total3++; } while( $RNA =~ /($stop1|$stop2|$stop3)/g) { $total++; } print "$total1|$total2|$total3|$total\n";

Subprogramas

● declaracion

sub analyze_string {codigo

}● Llamado:

&analyze_string;

O

analyze_string;

Paso de parametros

($val1,$val2) = (8,7);

@arrg3 = (3,4,5);

mi_subrutina($val1,$val2,@arrg3);

sub mi_subrutina {

my($sarg1,$sarg2,@sarg3) = @_;

print "subrutina con parámetros\n";

}

Ejemplo$seq1 = “ATGGGCCGTGCTGA...UAA";$seq2 = “ATGCGCTGTGATGA....UAG";$ident= calculaIdentidad($seq1,$seq2);

sub calculaIdentidad {my ($secA,$secB) = @_; my $id = 0;my $len =length($secA);for($pos=0;$pos< $len;$pos++)

{ if(substr($secA,$pos,1) eq substr($secB,$pos,1))

{ $id++; } } return $id/$len; }

Identidad.pl

top related