Upload
hoangkhanh
View
213
Download
0
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
MaterialPerl : 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 ;
● Tarefas com soluções multiplataforma ;
Introdução
• 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 ;
Perl x Bioinformática
http://www.bioperl.org/wiki/How_Perl_saved_human_genome
Perl x Bioinformática
Perl x Bioinformática
Algoritmo
Entrada dos Dados
Processamento
Saída dos Resultados
➔Aritmética Simples : soma de dois números inteiros
Z = X + Y
Y = 8
X = 5
Imprime Z (13)
Variáveis
➔X , Y e Z são variáveis :➔As variáveis guardam valores que serão utilizados posteriormente;
...
E0E1E2
En
E3E4
8
5
...
13
K
...
Y
X
...
Z
Representação das variáveis na memória do computador:
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
Sintaxe das variáveis
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 podem ser acessados pelos seusíndices:
$gene[0] = ‘BRCA1’;$cromossomos[3] = 7;
Sintaxe das variáveis
Hash :%codons = ( 'ATG'=>'M',
'CTT'=>'L','ATT'=>'I','GTT'=>'V’ );
$var = $codons{'GTT'};O conteúdo de $var é igual a V
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= , += , -= ,*= , .=
Operadores
➔Exemplos :
my $x = 8;my $y = 2;
$z = $x * $y$z == 16
my $codonA = 'ACG';my $codonB = 'ACg';
$codonA ne $codonB
Instruções if e unless
If : A declaração será executada se aexpressão lógica for verdadeira :
unless: A declaração não será executada se aexpressão for verdadeira :
my $varA = 3;my $varB = 5;if ( $varA < $varB ) {
....}
my $varA = „A‟;unless ( $varA eq 'B' ) {
....}
Instruções de Loop
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”;
}while ( $i <= $#genes );
do bloco while expr;
my $i = 0;do{
print “$genes[$i]\n”;
}until ( $i > $#genes );
do bloco until expr;
my @genes = ('BRCA1', 'NAT2' , 'MMP9' , 'MYC');
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
Expressões Regulares
➔Tradução➔ Traduz todas as ocorrências dos caracteres encontrados na lista de pesquisa
pelo caractere correspondente na lista de substitutos.
$var =~ tr/lista_depesquisa/lista_de_substitutos/[c][d][s]
my $dna = 'acgtccatcccccatta';$dna =~ tr/[ACGT]/[TGCA]/;print “$dna”; #imprime tgcaggtagggggtaat
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
BRCA1 1BRCA1 3MMP9 2BRCA1 6NAT2 3NAD1 2NAT2 5MMP9 3
BRCA1 1 3 6MMP9 2 3NAT2 3 5NAD1 2
#!/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”;print join (“ ”,@{$HoA{$key}} ) , “\n”;
}
Hash de Array
Estruturas Avançadas
BRCA1 1 2BRCA1 3 2MMP9 2 1BRCA1 6 2NAT2 3 4NAD1 2 2NAT2 5 4MMP9 3 1
2BRCA1 1 3 6NAD1 2
1MMP9 2 3
4NAT2 3 5
#!/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[2]}{$array[0]} }, $array[1] );
}close(IN);
foreach my $ka ( keys %HoHoA ){
print “$kb\n”;foreach my $kb ( keys %{$HoHoA{$kb}} ){
print “$kb\t”;print join (“ ”,@{$HoHoA{$ka}{$kb}} ) , “\n”;
}}
Hash de Hash de Array
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”;
}
Vamos praticar ?
Faça um script para traduzir uma sequência denucleotídeos para uma ORF. Dica :
perldoc split join reverse hash rotina
Enviar para o email [email protected] até 18/2