introducción a perl - ub.edu · entorno de trabajo preferente: linux. ... ejecución del script...

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

Upload: others

Post on 12-Oct-2019

10 views

Category:

Documents


0 download

TRANSCRIPT

Introducción a Perl

Alex SánchezDepartament d'Estadística-UB

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

Esquema

IntroducciónEstructura de un script sencilloTipos de variables

Escalares ($), arrays (@), hashes (%)

OperadoresEstructuras de control

¿Qué es Perl?Practical Extraction And Reporting LanguageCreado por Larry Wall en 1987 para disponer de una herramienta flexible y potente (“a language of getting your job done”)Originalmente orientado a la manipulación de textos su uso se ha extendido a

Administración de sistemas,Desarrollo web (CGIs)Programación de redes o entornos gráficos

Perl en BioinformáticaUso generalizado en Bioinformática

Muchos datos son cadenas de texto.Entorno de trabajo preferente: linux.Fácil de acceder a datos de internet.Curva de aprendizaje es muy rápida.Gran biblioteca de módulos (CPAN, BioPerl,...) que permiten resolver rápidamente problemas concretos.Es gratuíto y multisistema.

El ciclo de desarrolloDefinir y delimitar el problema¿Existe código que lo resuelva?

Si es así -->AdaptarloSi no existe o no es adaptable...

Diseñar nuestra soluciónEscribir el código

Ciclos prueba/depuración

Ejecutar el programa

EsquemaIntroducciónEstructura de un script sencilloTipos de variables

Escalares ($), arrays (@), hashes (%)OperadoresEstructuras de control

“Hola Mundo”Abrir una terminalCrear un directoriode trabajoSituarse en élCrear archivo‘hola_mon.pl’Codificar programaHacerlo ejecutableProbar/Ejecutar

mkdir pract_perlcd pract_perlemacs ‘hola_mon.pl’chmod +x hola_mon.pl...

perl-v hola_mon.pl

Los scripts de Perl

#!/usr/bin/perluse strict;use warnings;# tell the program to# print "Hello world"print "Hello world" ;# tell the program # to exitexit ;

Ejecución del script• Enviando el programa al intérprete>perl hola_mon.pl

• Haciendo que el archivo sea ejecutable> chmod a+x hello.pl

> ./hola_mon.pl

EsquemaIntroducciónEstructura de un script sencilloTipos de variables

Escalares ($), arrays (@), hashes (%)OperadoresEstructuras de control

Variables y tipos de datosLas variables son contenedores que permitenrepresentar datos de diversos tipos

Tipo Prefijo Ejemplo Describe

Escalar $ $nom Valor individual (numero o cadena)

Array @ @alturas Lista de valores con clave numérica (“indice”)

Hash % %descripts Lista de valores con clave textual

Subrutina & &power Fragmento de código

EscalaresCadenas, números, valores lógicos, referencias.No es preciso declarar el tipo. Perl puedeasignarlo por contexto.Empiezan con “$” y se declaran con “my”Ejemplos

my $num = 42; my $num2 = “42”; $name = ‘joe’$color = “blue”, $string_w_num = “I have 10 apples” apples”

Manipulación de escalares• chomp, chop, lc, lcfirst, length,

reverse, substr, uc, ucfirst,• chr, crypt, hex, index, oct, ord, pack,

q//, qq//, rindex, sprintf, tr///, y///• rand, abs, atan2, cos, exp, hex, int,

log, oct, sin, sqrt, srandhttp://perldoc.perl.org/perlfunc.html#Perl-Functions-by-Category

“Quoting”El uso de comillas es sutil: “...”. ‘...’Puede permitir acceder al valor de unavariable dentro de un texto

$var =10;$text = “There are $var apples”

– print $text -->There are 10 apples

$text2 = ‘There are $var apples’– print $text2 -->There are $var apples

Datos estructurados

Arrays• Listas de valores ordenados,• Indexados por un numero • Empiezan por el valor 0.

Ejemplo de arrays#!/usr/bin/perluse strict; use warnings;my $one = 1;# array of stringsmy @array_string1= ('$one', 'Two', 'Three', 'Four');my @array_string2= ("$one","Two","Three","Four");# Se puede declarar primero y asignar valores despuesmy @array_string3;$array_string3[0] = "$one";$array_string3[1] = "Deux";$array_string3[2] = "Trois";$array_string3[3] = "Quatre";print @array_string1; print "\n";print @array_string2; print "\n";print @array_string3; print "\n";exit;

Funciones para la manipulacion de arrays

Ejemplo de manipulación de arrays#!/usr/bin/perl

use strict; use warnings;

# array of strings

my @array_string = ('One', 'Two', 'Three', 'Four');

# replaces One with Zero in @array_string

$array_string[0] = 'Zero';

print "@array_string\n";

my @sort_array_string = sort @array_string;

print "@sort_array_string\n";

pop (@sort_array_string);

push (@sort_array_string, "One");

push (@sort_array_string, $array_string[0]);

print "@sort_array_string\n";

exit;

Hashes• Colecciones desordenadas de valores

escalares indexadas por una clave caracter.

Ejemplo de Hash#!/usr/bin/perluse strict; use warnings;my %codon3 = ("TTT" => "Phe","TTA" => "Leu",);print $codon3{'TTT'};print "\n";exit;

EsquemaIntroducciónEstructura de un script sencilloTipos de variables

Escalares ($), arrays (@), hashes (%)OperadoresEstructuras de control

Operadores de perl

Como perl no distingue entre textos y números (todos son escalares)Debemos utilizar operadores de coparación distintos según deseemos considerar que comparamos textos o números.

Más sobre operadoresExpresiones lógicas&& y|| o! No

Diversos= asignación. Concatenar cadenasx Multiplicar cadenas.. Crea una lista de números

(rango)

Es posible combinar operadores con “=“

$a += 1; equivale a$a = $a + 1; $a++;

$a -= 1; equivale a$a = $a - 1; $a--;

$a .= "\n“equivale a $a = $a. "\n";

Ejemplos de operadores#!/usr/bin/perl

use strict;

use warnings;

my $x = 100;

my $y = 99;

if ($x > $y)

{ print "\"$x\" is numerically greater than \"$y\"\n" ; }

else

{ print "\"$x\" is numerically smaller than \"$y\"\n" ; }

if ($x gt $y)

{ print "\"$x\" is alphabetically greater than \"$y\"\n" ; }

else

{ print "\"$x\" is alphabetically smaller than \"$y\"\n" ; }

exit ;

EsquemaIntroducciónEstructura de un script sencilloTipos de variables

Escalares ($), arrays (@), hashes (%)OperadoresEstructuras de control

Estructuras de control

BifurcacionesSimples [if], dobles [if…else]

IteracionesIncondicionales [for] Condicionales [while]

Bifurcación simple: SI... ENTONCES...

Condició

Acció

SINO •Se evalua la condiciòn

–Si es cierta se ejecuta la acción.–Si es falsa se ignora la acción y se pasa a las siguientes.

Bifurcación doble:SI..ENTONCES... EN CASO

CONTRARIO...

Condició

Acció 1

SINO

Acció 2

Ejemplo de estructura SI…ENTONCES…SI NO…

TreuMISSATGE D'ERROR

Estructura IF..THEN..ELSE

Calcula AREA

INICI

FI

Entra RADI

Treu RESULTAT

Radi > 0?SI NO

Ejemplo de ‘if / if else’#!/usr/bin/perluse strict;use warnings;my $PI =3.141592;print "\nEntra el radio y pulsa "return\":\t";my $radio = <STDIN>;chomp $radio;if ($radio > 0){

my $Area=PI*$radio^2}else

{print “\nEl radio no puede ser negativo \n”;}exit ;

La estructurapara ...i...desde... hasta...

Vc<=Vf

Vc:=Vc+In

Si

No

Acció

Vc:=Vi

•Se empieza con una inicialización de una variable contadora

–Se ejecuta una sola vez•La condición de final de bucle es como en otros casos•El incremento del contador es automático

Ejemplo de ‘for’ (1)#!/usr/bin/perluse strict;use warnings;my $counter;for ($counter=1;$counter<=10;$counter++) {print “Puedo contar hasta $counter !\n";}exit ;

Ejemplo de ‘for’ (2): for anidado#!/usr/bin/perluse strict; use warnings;my $i; my $j;for ($i=1;$i<=5;$i++) {

print "\n$i";for ($j=10;$j<=100;$j+=10) {print "\t$j";}

}print "\n";exit ;

Estructura: “Mientras...Repetir”

•Se evalúa la condición al principio del bucle•La acción se ejecuta entre 0 y N veces:

–Aunque puede no ejecutarse nunca!

Condició

Acció

Si

No

Mentre…Repetir

Ejemplo de ‘while’#!/usr/bin/perluse strict;use warnings;my $number = 1;while ($number<=10) {print “Puedo contar hasta $number !";$number+=1; #Ha !}exit ; #really ?

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