Introducción a Perl (II) - Universitat de Barcelona - Home · Chequeo de archivos con perl File...

22
Introducción a Perl (II) Alex Sánchez Departament d'Estadística-UB Unitat d'Estadística I Bioinformàtica- IRHUVH

Transcript of Introducción a Perl (II) - Universitat de Barcelona - Home · Chequeo de archivos con perl File...

Introducción a Perl (II)

Alex SánchezDepartament d'Estadística-UB

Unitat d'Estadística I Bioinformàtica-IRHUVH

Esquema

• Archivos de texto• Acceso, manejo y prueba de archivos• Variables especiales• Subrutinas: funciones y

procedimientos

Archivos de texto

• Archivos compuestos únicamente por caracteres, sin formato ni códigos especiales.

• http://es.wikipedia.org/wiki/Archivo_de_texto

• Existen distintas formas de codificarlos ASCII, ISO-8859-1 o Latín-1, Unicode,

• Contienen, algunos códigos “no visibles” (salto de linea, tabulación...) que pueden cambiar entre sistemas operativos:

– Unix, Linux :\n ~ MacOS :\r ~ Windows \r\n

Archivos de texto

less lista.txt Sanchez Pla Alex Dr.RuÃ-z de Villa M.Carme Dra.Mosquera Jose Luis Sr.Vegas Lozano Esteban Dr.

od –c lista.txt 0000000 S a n c h e z P l a \t A l e x0000020 \t D r . \n R u 303 255 z d e V i0000040 l l a \t M . C a r m e \t D r a .0000060 \n M o s q u e r a \t J o s e L0000100 u i s \t S r . \n V e g a s L o0000120 z a n o \t E s t e b a n \t \t D r0000140 . \n \n0000143

Archivos en formato FASTA

Esquema

• Archivos de texto• Acceso, manejo y prueba de archivos• Variables especiales• Subrutinas: funciones y procedimientos

Entrada y Salida de información en Perl• La entrada al programa puede ser:

– Por linea de comandos/teclado– Desde archivos– Desde otro programa/script.

• La salida del programa puede ser– A la terminal/por pantalla– A un archivo– A otros programas/scripts.

Entrada y salida simples#/usr/bin/perluse strict; use warnings;print "¿Apellido?: ";my $lastname = <STDIN>; chomp $lastname;print "¿Nombre?: ";my $firstname = <STDIN>; chomp $firstname;print "Hola $firstname$lastname,\nEspero que te guste Perl!\n";exit;

• Operador de entrada: <STDIN>– Entrada por defecto.– Espera un valor escalar– Se lee la linea entera

• Salida por pantalla– print

ejemplo_2_1.pl

“Controladores” de archivos• La conexión entre un archivo y un programa

se realiza a través de variables epeciales o “controladores de archivos” (filehandlers)

• Controladores por defecto de perl– STDIN:

•(STandarDINput): teclado o navegador – STDOUT:

•(STandarDOUTput): pantalla o navegador•Se usa implícitamente al hacer “print”

– STDERR•(STandarDERRor): pantalla o navegador

Ejemplo de lectura de archivo

#!/usr/bin/perluse strict; use warnings;open (MIARCHIVO, “lista.txt") or die "Error!\n";while (my $linea = <MIARCHIVO>) {chomp $linea;my @array_de_lineas = split (/\t/, "$linea");print "Hola $array_de_lineas[2] $array_de_lineas[1] !\n";}exit;

ejemplo_2_2.pl

Abrir para leer o para escribir

•La función open() abre un fichero y lo asocia al controlador que se indique.•Se puede abrir para leer, escribir (>) o añadir (>>)

open(INFILE, "input.txt") or die "Can't open input.txt: $!";

open(OUTFILE, ">output.txt") or die "Can't open output.txt: $!";

open(LOGFILE, ">>logfile") or die "Can't open logfile: $!";

•La función close() cierra los ficherosclose(INFILE)

•print () puede usar el nombre del controlador para indicar a que archivo debemos imprimir.

print STDERR "This is your final warning\n";

print OUTFILE $record;

print LOGFILE $logmessage;

Ejemplo de lectura-escritura#!/usr/bin/perluse strict; use warnings;my $filename = $ARGV[0];open (INPUT_FILE, "$filename") or die "Error!\n";open (OUTPUT_FILE, ">output.txt") or die "Error!\n";while (my $ligne = <INPUT_FILE>) {chomp $ligne;my @line_array = split (/\t/, "$ligne");print OUTPUT_FILE "Hello $line_array[2] $line_array[1] !\n";}exit;

La variable de argumentos @ARGV

•Un array especial predefinido por perlpara contener los argumentos co que se ha invocado el programa.•Va bien si se desea utilizar estos argumentos dentro del programa pero se han pasado interactivamente al llamarlo.

Ejemplos de uso de @ARGV#!/usr/bin/perluse strict; use warnings;print @ARGV;my $nb_arg = @ARGV;my $argument = $ARGV[0];print "\n$nb_arg\n";print "The invocationargument is: $argument\n";exit;

#!/usr/bin/perluse strict; use warnings;my $filename = $ARGV[0];open (FILE, "$filename") ordie "Error!\n";while (my $ligne = <FILE>) {chomp $ligne;my @line_array = split (/\t/, "$ligne");print "Hello $line_array[2] $line_array[1] !\n";}exit;

Depuracion de programas•perl –d ejemplo_2_2.pl (desde el shell)

–Invoca el depurador y permite ejecuta el programa paso a paso

•ALT+x perldb (desde emacs)–Abre un buffer para el depurador y otro para el código.

Chequeo de archivos con perlFile test Meaning-r File is readable by effective user/group.-w File is writable by effective user/group.-x File is executable by effective user/group.-o File is owned by effective user.-e File exists.-f File is a plain file.-d File is a directory.-T File is a text file.-B File is a binary file (opposite of -T).-M Age of file (at startup) in days since modification.-A Age of file (at startup) in days since last access.-C Age of file (at startup) in days since inode change.

. . .if (-e $filename) {#do something}. . .

Esquema•Archivos de texto•Acceso, manejo y prueba de archivos•Variables especiales•Subrutinas: funciones y procedimientos

Subrutinas en perlUna subrutina es un fragmento de codigo,con nombre, reutilizable y accesible, escrito para implementar una funcio-nalidad específica y pensado para evitar repeticiones redundantes del código.

Funciones y procedimientos#defining subroutinesub myfunc {my $param = shift(@_);. . . return $result;}

# calling a function$calcul =

myfunc($value);

#defining subroutinesub myproc {my $param = shift(@_);. . . return;}

# calling proceduremyproc($value);

Un procedimiento toma una entrada pero no devuelve nada

Una función toma una entrada y retorna un valor

Ejemplos de procedimientos#!/usr/bin/env perl

use strict; use warnings;

my @names1 = ("Pedro", "Claire", "Yemima", "Fabien" ,"Francisco");

my @names2 = ("Sandra Yukie", "Simona", "Christophe", "Dominique", "Michaela");

my @names3 = ("Lionel", "Gabriele", "Michael", "Charlotte", "Subhash", "Adam");

&pretty_print(@names1);

&pretty_print(@names2);

&pretty_print(@names3);

exit ;

sub pretty_print {

foreach (@_) {

my $size = length($_);

print '*'x($size+2),"\n";

print "*$_*\n";

print '*'x($size+2),"\n";

}

}

Las subrutinas pueden requerir parámetros de entrada.La lista de dichos parámetros se guarda en una variable especial denominada “@_”

Ejemplo de función#!/usr/bin/perluse strict; use warnings;# pass 2 arguments to the plus function# receive the output in $summy $sum = plus(12,34);print "$sum\n";exit;

sub plus{my($x, $y)=@_; return $x+$y;}

AgradecimientosLas transparencias presentadas se han inspirado de forma considerable en los materiales del excelente curso de V. Ioannidis & A. Valesia“Perl Programming for Life Sciences –2010”Impartido en el Swiss BioinformaticsInstitute