36
Programação PERL Israel Tojal da Silva [email protected]

Título da Apresentação - lgmb.fmrp.usp.brlgmb.fmrp.usp.br/cvbioinfo2009/extras/apresentacoes/Perl_0402.pdf · Variáveis e Estrutura de Dados Referências Expressões Regulares

Embed Size (px)

Citation preview

Programação PERL

Israel Tojal da [email protected]

Sumário

Introdução – visão geral

Variáveis e Estrutura de Dados

Referências

Expressões Regulares

Funções

Manipulação de Arquivos

Ordenação

Introdução

Perl : Guia de Consulta RápidaDecio Jr. - Ed. Novatec

Learning Perl (4th ed)by Randal L. Schwartz, Tom Phoenix, brian d foy. Ed. O'Reilly

Programming Perl (2nd Edition) by Larry Wall, Tom Christiansen, Randal L. Schwartz,

Stephen Potter Ed. O'Reilly

Advanced Perl Programming (2th ed)by Simon Cozens. Ed. O'Reilly

Introdução

O que é PERL?

“Perl is a language for getting your job done”

Larry Wall

Introdução

• PERL ( Practical Extraction and Report Language ) é uma linguagem de programaçãocriada por Larry Wall em 1987 e que pode ser usada em uma grande variedade detarefas :

• Processamento de texto;

• Desenvolvimento Web;

• Administração de sistemas;

• Acesso a Banco de Dados;

• Características da PERL

• Linguagem simples;

• Alto nível;

• Suporte a várias plataformas (Unix, Mac OS, Windows, ...);

• Modular e Orientadas a Objetos;

• Desenvolvimento rápido;

Introdução

Perl x Bioinformática

http://www.bioperl.org/

Perl x Bioinformática

Perl x Bioinformática

Perl x Bioinformática

Primeiro programa

#!/usr/bin/perl

print “Imprimindo uma mensagem\n”;

$ perl hello.pl

hello.pl

Variáveis

O que são ?

Posições na memória do computador, que são usadas para guardarem valores

$var

...

E0E1E2

En

E3E4

6

...

E0E1E2

En

E3E4

#!/usr/bin/perl

$var = 6;

Sintaxe das variáveis

Tipo Caracter Exemplo É um nome para:

Escalar $ $dna

Array @ @genes Uma lista de valores

Hash % %codons

Um valor individual ( números ou string )

Um grupo de valores, indexado por string

Escalares :

$dna = 'ATGCTTATTGTT';

$hits = 5;

$evalue = 5e-120;

$directory = `pwd`;

Sintaxe das variáveis

Array:

@genes = ('BRCA1', 'NAT2' , 'MMP9' , 'MYC');@cromossomos = (1,3,5,7,9,11,13,15,17,21,'X','Y’);

• Os valores são acessados pelos seus índices:print “$gene[0]”; # imprime BRCA1;print “$cromossomos[3]”; # imprime 7;

• Tamanho do arrayprint “$#gene”; # imprime 3;

• Acessando uma fatia do arrayprint join(“\t”,@cromossomos[3..5]) , “\n”; imprime 7 9 11

Sintaxe das variáveis

Hash:

%codons = ( 'ATG'=>'M','CTT'=>'L','ATT'=>'I',

);

• Acessando o valor de uma chave do hash

print “$codons{'CTT'}\n”; # imprime: L

•Acessando os valores de todas as chaves do hash

foreach my $key ( keys %codons ){ # imprime:# CTT L

print “$key\t$codon{$key}\ n”; # ATT I} # ATG M

Sintaxe das variáveis

Controlando avisos e variáveis

use warnings;use strict;

my $var = 10;

➔ Variáveis em Perl são globais por default

Operadores

Operador Tipo

+ , - , * , / , % , ** , ++ , -- Aritmético

< , <= , == , >= , > , != Comparação Numérica

&& , || , ! , and , or , not Lógicos

lt , gt , le , ge , eq , ne

Atribuição

Comparação de String= , += , -= ,*= , .=

➔Exemplos :

$x = 8;$y = 2;$z = $x * $y$z == 16

$codonA = 'ACG';$codonB = 'ACG';$codonA ne $codonB

Operadores

If : A declaração será executada se a expressão lógica for verdadeira:

unless: A declaração não será executada se a expressão for verdadeira:

Instruções if e unless

my $varA = 3;my $varB = 5;if ( $varA < $varB ) {

....}

my $varA = „A‟;unless ( $varA eq 'B' ) {

....}

Instruções Interativas (looping)

my $i = 0;while ( $i <= $#genes ){

print “$i : $genes[$i]\n”; $i++;

}

for ( my $i =0 ; $i <= $#genes ; $i++ ) {

print “$i : $genes[$i]\n”; }

foreach my $gene ( @genes ) {

print “$gene\n”; }

@genes = ('BRCA1', 'NAT2' , 'MMP9' , 'MYC');

while (expr) bloco

for(expr;expr;expr) bloco

foreach var (lista) bloco

Formas especiais da instrução do

my $i = 0;do{

print “$genes[$i]\n”;$i++;

}while ( $i <= $#genes );

do bloco while expr;

my $i = 0;do{

print “$genes[$i]\n”;$i++;

}until ( $i > $#genes );

do bloco until expr;

@genes = ('BRCA1', 'NAT2' , 'MMP9' , 'MYC');

Desviando do caminho : next e last

next;

last;

@genes = ('BRCA1', 'NAT2' , 'MMP9' , 'MYC');

my $i = 0;while ( $i <= $#genes ){

next if ($genes[$i] =~ /A/);print “$genes[$i]\n”;

$i++;}

my $i = 0;while ( $i <= $#genes ){

last if ($genes[$i] eq „MYC‟);print “$genes[$i]\n”;

$i++;}

Um programa Perl

#!/usr/bin/perl

use strict;use warnings;

my $dna;my @array = ('a','c','g','g','a','g','c','t','c','g');for (my $i =0; $i <= $#array; $i++) {

$dna .= $array[$i];print “$dna\n”;

}

perl dna.pl

0 a1 ac2 acg

3 acgg

4 acgga

5 acggag

6 acggagc

7 acggagct

8 acggagctc

9 acggagctcg

Referências

➔Referências são ponteiros para tipos de dados previamente definidos :

my $var = 6;my $ref_var = \$var;

$var

$ref_var

...

E0E1E2

En

E3E4

6

E1

...

E0E1E2

En

E3E4

print $ref_var; # imprime E1

print $$ref_var; # imprime 6

Referências

Referência Definição Valor

Escalar $ref_var = \$var; $$ref_var

Array $ref_array = \@genes; $ref_array->[0]Hash $ref_hash = \%hash; $ref_hash->{'ATG'}

Expressões Regulares

➔ Pesquisa➔ A procura por grandes quantidades de dados de modo conveniente e eficaz é

realizada através da combinação de padrões

expr =~ [ m ] /padrão/[g][i][m][o][v][x]

my $dna = 'ACGTTCCAACA';if ( $dna =~ /aac/i ){

...}

my $dna = 'ACGTTCCAACA';if ( $dna =~ /aac/ ){

...}

Expressões Regulares

➔Substituição➔ Pesquisa uma string procurando um padrão e, se encontrado, troca aquele

padrão pelo texto de substituição

$var =~ s/padrão/substituto/[e][g][i][m][o][s][x]

my $dna = 'acgtccatc--------------ccccatta';$dna =~ s/\-//g;print “$dna”; #imprime acgtccatcccccatta

my $dna = 'TCCTCCATCCG';$dna =~ s/C/c/;print “$dna”; #imprime TcCTCCATCCG

Sub-rotinas

➔ A sub-rotina agrupa uma sequência de declarações e funções quepoderão ser reutilizadas pelo programa.

#!/usr/bin/perl

use strict;use warnings;

my ($x,$y,$sum) = (5,9,0);

$sum= &sum ($x,$y);

print “$x + $x = $sum\n”;

sub sum{

my ($var1,$var2) = @_;

my $sum = $var1 + $var2;

return $sum;}

#!/usr/bin/perl

use strict;use warnings;

my ($x,$y,$sum) = (5,9,0);

&sum ($x,$y,\$sum);

print “$x + $x = $sum\n”;

sub sum{

my ($var1,$var2,$rS_sum) = @_;

$$rS_sum = $var1 + $var2;

return;}

Manipulação de Arquivos

...

open (IN,'arquivo.txt') or die $!;while (<IN>){

print “$_”;}close (IN);

...

...

open (OUT,'>arquivo.txt') or die $!;

print OUT “$var\n”;

close (OUT);

...

Estruturas Avançadas

1 BRCA12 IKZF21 FOXD34 WFS14 RUFY33 COLQ4 NSUN7

1MMP9 FOXD3

2IKZF2

4WFS1 RUFY3 NSUN7

3COLQ

#!/usr/bin/perl

use strict;use warnings;

my %HoA;

my $fileIn = shift or die $!;my @array;open(IN,$fileIn) or die $!;while(<IN>){

chomp;@array = split(“\t”,$_);push ( @ { $HoA{$array[0]} }, $array[1] );

}close(IN);

foreach my $key ( keys %HoA ){

print “$key\n\t”;print join (“ \t”,@{$HoA{$key}} ) , “\n”;

}

Hash de Array

Estruturas Avançadas

1BRCA1 NM_11 NM_32FOXD3 NM_82

4WFS1 NM_54RUFY3 NM_88 NM_89NSUN7 NM_52

3COLQ NM_92 NM_93

2IKZF2 NM_13 NM_14

#!/usr/bin/perl

use strict;use warnings;

my %HoHoA;

my $fileIn = shift or die $!;my @array;open(IN,$fileIn) or die $!;while(<IN>){

chomp;@array = split(“\t”,$_);push ( @ { $HoHoA{$array[0]}{$array[1]} }, $array[2] );

}close(IN);

foreach my $ka ( keys %HoHoA ){

print “$ka\n”;foreach my $kb ( keys %{$HoHoA{$ka}} ){

print “$kb\t”;print join (“ ”,@{$HoHoA{$ka}{$kb}} ) , “\n”;

}}

Hash de Hash de Array 1 BRCA1 NM_111 BRCA1 NM_322 IKZF2 NM_132 IKZF2 NM_141 FOXD3 NM_824 WFS1 NM_544 RUFY3 NM_884 RUFY3 NM_893 COLQ NM_923 COLQ NM_934 NSUN7 NM_52

Ordenação

BRCA1 15 10MMP9 10 2NAT2 3 4NAD1 9 25HOX 44 87TP53 60 3

TP53 60 3HOX 44 87BRCA1 15 10MMP9 10 2NAD1 9 25NAT2 3 4

#!/usr/bin/perl

use strict;use warnings;

my %HoA;

my $fileIn = shift or die $!;my @array;open(IN,$fileIn) or die $!;while(<IN>){

chomp;@array = split(“\t”,$_);push ( @ { $HoA{$array[0]} }, @array[1..2] );

}close(IN);

foreach my $key ( sort { $HoA{$b}[0] $HoA{$a}[0] } keys %HoA ){

print “$key\n”;print join (“ ”,@{$HoA{$key}} ) , “\n”;

}

Funções PERL

• split• join• sort• substr• length• push• pop• chomp• sqrt• glob• reverse

http://geekandpoke.typepad.com/geekandpoke/perl/

Vamos praticar ?

Faça um script para traduzir uma sequência de nucleotídeos para uma ORF.Dica :

perldoc split join reverse substr hash rotina

http://xavante.fmrp.usp.br/verao