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
• 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
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”;
}