Vous êtes sur la page 1sur 61

Introdução ao Perl

Curso de especialização
Latu-sensu em Bioinformática

Agosto / 2002 Laboratório de Bioinformática – LNCC/MCT


Introdução
! O que é uma linguagem de
programação ?
! O que é a linguagem de programação
PERL ?
! Características do PERL

Laboratório de Bioinformática LNCC / MCT Agosto / 2002


Linguagem de programação
! Linguagem " É o uso da palavra articulada e
escrita como meio de expressão e
comunicação
! Léxico " Conjunto de palavras de uma língua
! Sintaxe " Estudo da disposição das palavras
na frase e a das frases no discurso, bem
como a relação lógica das frases entre si
! Semântica " O significado do discurso

Laboratório de Bioinformática LNCC / MCT Agosto / 2002


Linguagem de programação
! Conjunto de instruções e regras de
composição e encadeamento, por meio
do qual se expressam ações
executáveis por um computador, seja
diretamente, seja por meio de processo
de compilação, interpretação ou
montagem

Laboratório de Bioinformática LNCC / MCT Agosto / 2002


Linguagem de programação
! Montagem " Conversão de um programa
fonte, escrito em linguagem assembly, para o
código de máquina
! Compilação " Conversão de um programa
fonte em um programa executável
! Interpretação "Conversão, em tempo de
execução, de um programa fonte em um
programa executável

Laboratório de Bioinformática LNCC / MCT Agosto / 2002


Linguagem de programação
! Exemplos de linguagem de:
! Montagem " Assembly
! Compilação " C, C++, Pascal
! Interpretação " Clipper, Basic, Perl

Laboratório de Bioinformática LNCC / MCT Agosto / 2002


Linguagem de programação
PERL
! PERL " Pratical Extraction Report
Language
! Desenvolvida por Larry Wall em 1986
! Versão disponível " 5.8.0
! Versão em desenvolvimento " 6

Laboratório de Bioinformática LNCC / MCT Agosto / 2002


Características do PERL
! Interpretada
! Alto nível
! Suporte a várias plataformas " Unix,
Windows, Mac OS, BeOS ...
! Modular e orientada o objetos

Laboratório de Bioinformática LNCC / MCT Agosto / 2002


Tipos de dados
! Tipos de dados
! Valores escalares
! Lista de valores " arrays
! Hashes

Laboratório de Bioinformática LNCC / MCT Agosto / 2002


Tipo de dados
! Scalars
! Armazena uma cadeia de caracteres ou
números. Ex.:
! Cadeia de caracteres " “perl”
! Números " 2, 3.14

Laboratório de Bioinformática LNCC / MCT Agosto / 2002


Tipos de dados
! Arrays de scalars
! É uma lista ordenada de scalars acessados
através de um índice. Ex.:
! array1 = (“c”, “c++”, “perl”)
! array2 = (1, 3, 5, 7, 9)
! O índice sempre começa com o número “0”
! array1[0] = “c”
! array2[3] = 7

Laboratório de Bioinformática LNCC / MCT Agosto / 2002


Tipos de dados
! Hashes de scalars
! É um conjunto não ordenados de pares
chave/valor que podem ser acessados
usando uma cadeia de caracteres, que é a
chave, como índice, para recuperar um
scalar que é o valor correspondente para
esta chave. Ex.:
! hash = (ling1 => “c”, ling2 => “perl”)

Laboratório de Bioinformática LNCC / MCT Agosto / 2002


Variáveis
! Variável do tipo scalar
! $x = “perl”
! $y = 3.14
! $x = 1.41
! $y = “c++”

Laboratório de Bioinformática LNCC / MCT Agosto / 2002


Variáveis
! $x = 123
! length($x) " 3
! $x = “casa”
! length($x) " 4
! $y = 2
! $x = 10/$y " $x = 5
! $y = “erro”
! $x = 10/$y " $x = ???
! Erro em tempo de execução (Illegal division by zero at
line nnn)

Laboratório de Bioinformática LNCC / MCT Agosto / 2002


Variáveis
! Variável do tipo array
! @x = (“a”, “b”, “c”)
! @y = (1, 2, 4)
! $a = $x[0]
! O conteúdo de $a é igual a “a”
! $b = $y[1]
! O conteúdo de $b é igual a 2

Laboratório de Bioinformática LNCC / MCT Agosto / 2002


Variáveis
! Variável do tipo hash
! %tabela = (Jan =>31, Fev=>28)
! $par1 = $tabela{‘Jan’}
! O conteúdo de $par1 é igual a 31
! $par2 = $tabela{‘Fev’}
! O conteúdo de $par2 é igual a 28

Laboratório de Bioinformática LNCC / MCT Agosto / 2002


Operadores
! Operadores podem ser classificados:
! de acordo com o número de operandos
! unários, binários, ternários
! ou pelo tipo de operação
! aritmética, lógica etc

Laboratório de Bioinformática LNCC / MCT Agosto / 2002


Operadores
! Unário e aritmético
! $a = 5
! ++$a " incrementa $a e retorna 6
! $a = $a + 1
! $a++ " retorna 5 e incrementa $a
! --$a
! $a--

Laboratório de Bioinformática LNCC / MCT Agosto / 2002


Operadores
! Binário e aritmético
! $a + $b, adição
! $a - $b, subtração
! $a * $b, multiplicação
! $a / $b, divisão
! $a % $b, resto da divisão
! $a ** $b, potenciação

Laboratório de Bioinformática LNCC / MCT Agosto / 2002


Operadores
! Binário e string
! $a . $b, concatenação
! $a = “abc”
! $b = “cde”
! $c = $a . $b " $c = “abccde”
! $a x $b, multiplicação
! $a = “abc”
! $b = 3
! $c = $a x $b " $c = “abcabcabc”
! $b = “c”
! $c = $a x $b " $c = ???

Laboratório de Bioinformática LNCC / MCT Agosto / 2002


Operadores
! Atribuição
! $a = 5
! $b = $a " $b = 5
! $a *= 3 " $a = 15
! $a .= $a "$a = “1515”
! $a x= 3 " $a = “151515151515”
! $a -= 1000000 " $a=151514151515

Laboratório de Bioinformática LNCC / MCT Agosto / 2002


Operadores
! Lógicos
! $a && $b (and)
! falso e falso = falso
! falso e verdadeiro = falso
! verdadeiro e falso = falso
! verdadeiro e verdadeiro = verdadeiro

! $a || $b (or)
! falso ou falso = falso
! falso ou verdadeiro = verdadeiro
! verdadeiro ou falso = verdadeiro
! verdadeiro ou verdadeiro = verdadeiro

! !$a (not)

Laboratório de Bioinformática LNCC / MCT Agosto / 2002


Operadores
! Comparação (números)
! == " igual
! != " diferente
! < " menor
! > " maior
! <= " menor ou igual
! >= " maior ou igual
! <=> " comparação
! retorna: 0 se igual, 1 se operando 1 é maior, -1 se
operando 2 é maior

Laboratório de Bioinformática LNCC / MCT Agosto / 2002


Operadores
! Comparação (string)
! eq " igual
! ne " diferente
! lt " menor
! gt " maior
! le " menor ou igual
! ge " maior ou igual
! cmp " comparação
! retorna: 0 se igual, 1 se operando 1 é maior, -1 se
operando 2 é maior

Laboratório de Bioinformática LNCC / MCT Agosto / 2002


Operadores
! Teste de arquivos
! -e " existe
! -r " permissão de leitura
! -w " permissão de escrita
! -d " verifica se é diretório
! -f " verifica se é um arquivo
! -T " verifica se é um arquivo texto

Laboratório de Bioinformática LNCC / MCT Agosto / 2002


Declarações
! Simples " sempre finalizada com um
“;”, com exceção da última linha de um
bloco
! print “teste”;
! Composta " um seqüência de
declarações dentro de um mesmo
escopo
! {$a =5; $b = 6; $c = $a*$b; print $c}

Laboratório de Bioinformática LNCC / MCT Agosto / 2002


Declarações
! Declarações de controle "Declarações
utilizadas para decidir a seqüência de
comandos a ser executada pelo
programa
! if "Avalia se uma condição é verdadeira e
executa um bloco de comandos
! unless "Avalia se uma condição é falsa e
executa um bloco de comandos

Laboratório de Bioinformática LNCC / MCT Agosto / 2002


Declarações
if ($a == $b)
{
print “$a é igual a $b”;
$a--
}
else interpolação de
{ variáveis
print “$a é diferente de $b”
}
Laboratório de Bioinformática LNCC / MCT Agosto / 2002
Declarações
unless ($a == $b)
{
print “$a é diferente que $b\n”
}

Caractere especial
de quebra de linha

Laboratório de Bioinformática LNCC / MCT Agosto / 2002


Declarações
if (($a == $b) && ($c == $d))
{
print “Todos os números são iguais\n”
}
elsif ($a != $b)
{
print “$a é diferente de $b\n”
}
elsif ($c != $d)
{
print “$c é diferente de $d\n”
}

Laboratório de Bioinformática LNCC / MCT Agosto / 2002


Declarações
if ($a == 1)
{
print “$a é igual a 1\n”
}
elsif ($a == 2)
{
print “$a é igual a 2\n”
}
else
{
print “$a é diferente de 1 e diferente de 2\n”
}

Laboratório de Bioinformática LNCC / MCT Agosto / 2002


Declarações
! Declarações de loop "Declarações utilizadas
para decidir quantas vezes um bloco de
comandos será executado
! while "Avalia se a condição é verdadeira e
executa um bloco de comandos
! until " Avalia se a condição é falsa e executa um
bloco de comandos
! No while e no until uma condição inicial é
determinada antes do início do loop e é
modificada dentro do bloco de comandos

Laboratório de Bioinformática LNCC / MCT Agosto / 2002


Declarações
! for " Avalia se a condição é verdadeira e
executa um bloco de comandos. A
condição inicial é determinada e
modificada na declaração do for
! foreach " Executa um bloco de comandos
para cada elemento de um conjunto de
scalars conhecido, como um array ou hash

Laboratório de Bioinformática LNCC / MCT Agosto / 2002


Declarações
while ($i < 10)
{
print “$i\t”;
$i++
} caracter especial
print “\n” de tabulação

Laboratório de Bioinformática LNCC / MCT Agosto / 2002


Declarações
abertura de arquivo e atribuindo-o para o filehandle “FILE”

open FILE, “teste.txt” if (-e “teste.txt”);


while (<FILE>)
faz o loop enquanto não
{ chegar ao final do arquivo
print “$_”
variável predefinida,
} que recebe a linha
corrente do arquivo
Laboratório de Bioinformática LNCC / MCT Agosto / 2002
Declarações
for ($i = 0; $i<=10; $i++)
{
print $b[$i].”\n”
}

Laboratório de Bioinformática LNCC / MCT Agosto / 2002


Declarações
foreach $a ($b)
{
print $a.”\n”
}

Laboratório de Bioinformática LNCC / MCT Agosto / 2002


Declarações
! Alteração no fluxo do loop
! next " Passa para a próxima interação
! last " Sai do loop
! redo " Refaz a interação sem avaliar a
condição novamente

Laboratório de Bioinformática LNCC / MCT Agosto / 2002


Funções
! Comandos predefinidos no Perl ou
construídos pelo programador
! Exemplos:
! print, open " predefinidos
! somar " construído pelo programador
sub somar
{
$a = shift; $b = shift;
$c = $a + $b;return $c
}
$resultado = somar(5,6);

Laboratório de Bioinformática LNCC / MCT Agosto / 2002


Escopo de variáveis
! É o espaço de visibilidade das variáveis.
Podem ser globais (visíveis em todo o
programa) ou locais (visíveis somente no
bloco ou na subfunção)
! Para criar uma variável com escopo local use
a palavra reservada my
! Para salvar o valor de uma variável global e
fazer com que assuma um valor local,
diferente, e no fim do bloco, retorne ao valor
original use a palavra reservada local

Laboratório de Bioinformática LNCC / MCT Agosto / 2002


Escopo de variáveis
! Exemplo
sub teste {
my $d = shift;
local $a;
print “\$a = $a\n”;
$c = $a-- + $d;
print “$a\t$d\n”;
return $c;
}

Laboratório de Bioinformática LNCC / MCT Agosto / 2002


Escopo de variáveis
#!/usr/bin/perl $a =
-1 5
$a = 10; 10 5 5
$b = 5; $d =
$teste = teste($b);
print “$a\t$b\t$teste\n”;
print “\$d = $d\n”

Laboratório de Bioinformática LNCC / MCT Agosto / 2002


Manipulação de arquivos e E/S
! Existem funções predefinidas para a
manipulação de arquivos e E/S
! open " Abre arquivo
! close " Fecha arquivo
! opendir " Abre diretório
! closedir " Fecha diretório
! readdir " Lê o conteúdo do diretório
! symlink " Cria um link
! chdir " Troca de diretório
! chmod " Troca os privilégios de um arquivo
! print " Imprime para uma saída
Laboratório de Bioinformática LNCC / MCT Agosto / 2002
Manipulação de arquivos e E/S
open FILEIN, “<teste.txt” or die “Erro: $!\n”;
open FILEOUT, “>teste.out” or die “Erro: $!\n”;
while (<FILEIN>)
{
chomp;
$a = $_ % 2;
if ($a == 0)
{
print FILEOUT “$_\n”
}
}
close FILEIN; close FILEOUT

Laboratório de Bioinformática LNCC / MCT Agosto / 2002


Expressões regulares
! É o meio de descrever um conjunto de
strings sem conhecer a lista de todas as
strings disponíveis, através de um
padrão definido pelo programador /
usuário, a partir de um conjunto de
operadores e caracteres especiais

Laboratório de Bioinformática LNCC / MCT Agosto / 2002


Expressões regulares
! Operadores
! m// " Verifica a ocorrência do padrão que está
entre as barras
! Exemplo
while (<FILE>)
{
if ($_ =~ m/ACGTAGTGT/) " if ($_ =~ /ACGTAGTGT/)
{
print “$_”
} operador de ligação
}

Laboratório de Bioinformática LNCC / MCT Agosto / 2002


Expressões regulares
! Operadores
! s/PADRÃO_1/ PADRÃO_2/ " Verifica a ocorrência
do PADRÃO_1 e o substitue pelo PADRÃO_2
! Exemplo
while (<FILE>)
{
if ($_ =~ s/ACG/TGC/)
{
print “$_”
}
}

Laboratório de Bioinformática LNCC / MCT Agosto / 2002


Expressões regulares
! Operadores
! tr/LISTA_1/ LISTA_2/ " Substitue cada elemento
da LISTA_1 pelos elementos correspondentes na
LISTA_2
! Exemplo
while (<FILE>)
{
if ($_ =~ tr/ACGT/acgt/)
{
print “$_”
}
}
operador de ligação

Laboratório de Bioinformática LNCC / MCT Agosto / 2002


Expressões regulares
! Metacaracteres
! \ " Para representar caracteres não alfanuméricos
! | " Alternação entre diferentes padrões
! () " Agrupamento. Trata o padrão como um grupo
! [] " Cria uma classe de caracteres
! {} " Define o número de ocorrências de um padrão
! ^ " Determina que o padrão deve estar no início da string
! $ " Determina que o padrão deve estar no final da string
! * " O padrão deve ocorrer 0 ou mais vezes
! + " O padrão deve ocorrer uma ou mais vezes
! ? " O padrão deve ocorrer 0 ou uma vez
! . " Qualquer caractere, com exceção do caracter de nova
linha
Laboratório de Bioinformática LNCC / MCT Agosto / 2002
Expressões regulares
! Metacaracteres
! Exemplos
! m/\t\t/ " procura por dois caracteres de
tabulação
! m /[Aa]/ " procura por “A” ou “a”
! m /(TGA)(TGT)/ " procura e agrupa por “TGA”
e “TGT”. Agrupar significa que estes valores
serão retornados nas variáveis $1 e $2
! s/(TGA)(TGT)/$2$1/

Laboratório de Bioinformática LNCC / MCT Agosto / 2002


Expressões regulares
! Metacaracteres
! Exemplos
! m/TGA|TGT/ " procura por “TGA” ou “TGT”
! m/^TGA / " procura por “TGA” no início da
string
! m/TGA$/ " procura por “TGA” no final da
string
! m/T.A/ " procura por “T”, qualquer caracter e
“A”

Laboratório de Bioinformática LNCC / MCT Agosto / 2002


Expressões regulares
! Metacaracteres
! Exemplos
! m/T*GT/ " procura por nenhum ou vários “T” e por
“GT”
! “TGT”, “TTTTGT” e “GT” satisfazem a esta expressão
regular
! m/(T+)GT / " procura por um ou vários “T” e por “GT”
e retorna na variável $1 a ocorrência dos “T”
! “TGT” e “TTTTGT” satisfazem a esta expressão regular
! m/T?GT/ " procura por nenhum ou um “T” e por “GT”
! “TGT” , “TTTTGT” e “GT” satisfazem a esta expressão
regular

Laboratório de Bioinformática LNCC / MCT Agosto / 2002


Expressões regulares
! Metasímbolos
! \w " qualquer alfanumérico mais “_”
! \W " qualquer caractere diferente de
alfanumérico
! \d " qualquer caractere numérico (0..9)
! \D " qualquer caractere diferente de numérico
! \s " qualquer caractere espaço em branco
! \S " qualquer caractere diferente de espaço em
branco
! \t " caractere de tabulação

Laboratório de Bioinformática LNCC / MCT Agosto / 2002


Expressões regulares
! Metasímbolos
! Exemplos
$nomeSequencia = “XL1010A01.g”
$nomeSequencia =~ /\w\w\d\d\d\d\w\d\d\.\w/
$nomeSequencia =~ /\D+\d+\w\d+\.\w/
$nomeSequencia =~ /\w{2}\d{4}\w\d{2}\.\w/
$organ = “XL”;
$nomeSequencia =~ /$organ\d{4}\w\d{2}.\w/

Laboratório de Bioinformática LNCC / MCT Agosto / 2002


Argumentos
! Argumentos são parâmetros passados para
um programa, no momento da execução
! Os parâmetros determinam como o programa
será executado
! Os argumentos são armazenados em um
array padrão chamado @ARGV
! Cada elemento do array é um parâmetro

Laboratório de Bioinformática LNCC / MCT Agosto / 2002


Argumentos
! Exemplo:
! Programa
...
$filein = $ARGV[0];
$fileout = $ARGV[1];
open FILEIN, “<$filein” or die “Erro: $!\n”;
open FILEOUT, “>$fileout” or die “Erro: $!\n”;

!Chamada
perl programa.pl teste.txt teste.out

Laboratório de Bioinformática LNCC / MCT Agosto / 2002


Módulos e OO
! Módulos " É a unidade fundamental para
reuso de código no Perl
! O Perl vem com um conjunto padrão de
módulos
! Exemplo:
! CGI " Módulo para implementar CGI
! Math::Complex " Módulo com funções de manipulação
de números complexos
! CPAN " Módulo para automatizar o acesso ao
CPAN(Comprehensive Perl Archive Network)

Laboratório de Bioinformática LNCC / MCT Agosto / 2002


Módulos e OO
! No CPAN (e em outros repositórios)
encontram-se vários módulos disponíveis
para a execução de diversas tarefas
! Exemplo:
! GD " Para manipulação de imagens
! DBI " Para implementar o acesso a banco de dados
! libwww " Para implementar diversos serviços de e para
web
! bioperl " Conjunto de módulos que implementam
diversas ferramentas para bioinformática

Laboratório de Bioinformática LNCC / MCT Agosto / 2002


Módulos e OO
! Orientação a objetos em Perl
! Um objeto é uma estrutura de dados com
comportamento (os métodos que
manipulam os atributos de um objeto)
! O orientação a objetos implementa
! herança
! polimorfismo
! encapsulamento

Laboratório de Bioinformática LNCC / MCT Agosto / 2002


Módulos e OO
! Geralmente os módulos disponíveis
implementam classes (tipos de dados)
que são reutilizadas em um programa
através da instanciação de um objeto
(variável)

Laboratório de Bioinformática LNCC / MCT Agosto / 2002


Referências
! Programming Perl
! Larry Wall, Tom Christiansen, Jon Orwant
! O’Reilly & Associates, Inc.
! ISBN: 0-596-00027-8

Laboratório de Bioinformática LNCC / MCT Agosto / 2002