You are on page 1of 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

por meio do qual se expressam ações executáveis por um computador. seja por meio de processo de compilação.Linguagem de programação ! Conjunto de instruções e regras de composição e encadeamento. seja diretamente. interpretação ou montagem Laboratório de Bioinformática LNCC / MCT Agosto / 2002 .

para o código de máquina Compilação " Conversão de um programa fonte em um programa executável Interpretação "Conversão. de um programa fonte em um programa executável Laboratório de Bioinformática LNCC / MCT Agosto / 2002 . escrito em linguagem assembly. em tempo de execução.Linguagem de programação ! ! ! Montagem " Conversão de um programa fonte.

Linguagem de programação ! Exemplos de linguagem de: ! ! ! Montagem " Assembly Compilação " C. Basic. C++. Pascal Interpretação " Clipper. Perl Laboratório de Bioinformática LNCC / MCT Agosto / 2002 .

8.Linguagem de programação PERL ! ! ! ! PERL " Pratical Extraction Report Language Desenvolvida por Larry Wall em 1986 Versão disponível " 5.0 Versão em desenvolvimento " 6 Laboratório de Bioinformática LNCC / MCT Agosto / 2002 .

BeOS . Mac OS. Windows. Modular e orientada o objetos Laboratório de Bioinformática LNCC / MCT Agosto / 2002 ..Características do PERL ! ! ! ! Interpretada Alto nível Suporte a várias plataformas " Unix..

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.14 Laboratório de Bioinformática LNCC / MCT Agosto / 2002 . 3.

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

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

41 “c++” Laboratório de Bioinformática LNCC / MCT Agosto / 2002 .Variáveis ! Variável do tipo scalar ! ! ! ! $x $y $x $y = = = = “perl” 3.14 1.

Variáveis ! $x = 123 ! length($x) " 3 length($x) " 4 $x = 10/$y " $x = 5 $x = 10/$y " $x = ??? ! ! $x = “casa” ! ! $y = 2 ! ! $y = “erro” ! Erro em tempo de execução (Illegal division by zero at line nnn) Agosto / 2002 Laboratório de Bioinformática LNCC / MCT .

“c”) @y = (1. 4) $a = $x[0] ! O conteúdo de $a é igual a “a” O conteúdo de $b é igual a 2 ! $b = $y[1] ! Laboratório de Bioinformática LNCC / MCT Agosto / 2002 .Variáveis ! Variável do tipo array ! ! ! @x = (“a”. 2. “b”.

Variáveis ! Variável do tipo hash ! ! %tabela = (Jan =>31. Fev=>28) $par1 = $tabela{‘Jan’} ! O conteúdo de $par1 é igual a 31 O conteúdo de $par2 é igual a 28 ! $par2 = $tabela{‘Fev’} ! Laboratório de Bioinformática LNCC / MCT Agosto / 2002 .

binários. lógica etc ! ou pelo tipo de operação ! Laboratório de Bioinformática LNCC / MCT Agosto / 2002 .Operadores ! Operadores podem ser classificados: ! de acordo com o número de operandos ! unários. ternários aritmética.

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 .

resto da divisão ** $b.$b. multiplicação / $b.Operadores ! Binário e aritmético ! ! ! ! ! ! $a $a $a $a $a $a + $b. subtração * $b. adição . potenciação Laboratório de Bioinformática LNCC / MCT Agosto / 2002 . divisão % $b.

Operadores ! Binário e string ! $a . multiplicação ! ! ! ! ! Laboratório de Bioinformática LNCC / MCT Agosto / 2002 . $b " $c = “abccde” $a = “abc” $b = 3 $c = $a x $b " $c = “abcabcabc” $b = “c” $c = $a x $b " $c = ??? ! $a x $b. concatenação ! ! ! $a = “abc” $b = “cde” $c = $a . $b.

= $a "$a = “1515” $a x= 3 " $a = “151515151515” $a -= 1000000 " $a=151514151515 Laboratório de Bioinformática LNCC / MCT Agosto / 2002 .Operadores ! Atribuição ! ! ! ! ! ! $a = 5 $b = $a " $b = 5 $a *= 3 " $a = 15 $a .

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) Agosto / 2002 Laboratório de Bioinformática LNCC / MCT .

Operadores ! Comparação (números) ! ! ! ! ! ! ! == " igual != " diferente < " menor > " maior <= " menor ou igual >= " maior ou igual <=> " comparação ! retorna: 0 se igual. -1 se operando 2 é maior Laboratório de Bioinformática LNCC / MCT Agosto / 2002 . 1 se operando 1 é maior.

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.

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 .

$c = $a*$b. ! Composta " um seqüência de declarações dentro de um mesmo escopo ! {$a =5.Declarações ! Simples " sempre finalizada com um “. print $c} Laboratório de Bioinformática LNCC / MCT Agosto / 2002 . $b = 6. com exceção da última linha de um bloco ! print “teste”.”.

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 Agosto / 2002 Laboratório de Bioinformática LNCC / MCT .

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 Agosto / 2002 Laboratório de Bioinformática LNCC / MCT .

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++ } print “\n” caracter especial de tabulação Laboratório de Bioinformática LNCC / MCT Agosto / 2002 .

“teste. } que recebe a linha corrente do arquivo Laboratório de Bioinformática LNCC / MCT Agosto / 2002 .txt”).txt” if (-e “teste. while (<FILE>) faz o loop enquanto não { chegar ao final do arquivo print “$_” variável predefinida.Declarações abertura de arquivo e atribuindo-o para o filehandle “FILE” open FILE.

$i<=10.”\n” } Laboratório de Bioinformática LNCC / MCT Agosto / 2002 .Declarações for ($i = 0. $i++) { print $b[$i].

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
Agosto / 2002

Laboratório de Bioinformática LNCC / MCT

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 = 10. $teste = teste($b). print “$a\t$b\t$teste\n”. print “\$d = $d\n” $a = -1 5 10 5 $d = 5 Laboratório de Bioinformática LNCC / MCT Agosto / 2002 . $b = 5.

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 Agosto / 2002 Laboratório de Bioinformática LNCC / MCT .

$a = $_ % 2.txt” or die “Erro: $!\n”. “<teste.Manipulação de arquivos e E/S open FILEIN. while (<FILEIN>) { chomp. open FILEOUT.out” or die “Erro: $!\n”. “>teste. if ($a == 0) { print FILEOUT “$_\n” } } close FILEIN. close FILEOUT Laboratório de Bioinformática LNCC / MCT Agosto / 2002 .

a partir de um conjunto de operadores e caracteres especiais Laboratório de Bioinformática LNCC / MCT Agosto / 2002 . através de um padrão definido pelo programador / usuário.Expressões regulares ! É o meio de descrever um conjunto de strings sem conhecer a lista de todas as strings disponíveis.

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 .

" Qualquer caractere. com exceção do caracter de nova linha Agosto / 2002 Laboratório de Bioinformática LNCC / MCT . 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 .Expressões regulares ! Metacaracteres ! ! ! ! ! ! ! ! ! ! ! \ " Para representar caracteres não alfanuméricos | " Alternação entre diferentes padrões () " Agrupamento.

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 .

qualquer caracter e “A” Agosto / 2002 Laboratório de Bioinformática LNCC / MCT .A/ " procura por “T”.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.

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 “TGT” . “TTTTGT” e “GT” satisfazem a esta expressão regular ! m/T?GT/ " procura por nenhum ou um “T” e por “GT” ! Laboratório de Bioinformática LNCC / MCT Agosto / 2002 .

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 Agosto / 2002 Laboratório de Bioinformática LNCC / MCT ..Expressões regulares ! Metasímbolos ! ! ! ! ! ! ! \w " qualquer alfanumérico mais “_” \W " qualquer caractere diferente de alfanumérico \d " qualquer caractere numérico (0.

Expressões regulares ! Metasímbolos ! Exemplos $nomeSequencia $nomeSequencia $nomeSequencia $nomeSequencia $organ = “XL”.\w/ =~ /\D+\d+\w\d+\.g” =~ /\w\w\d\d\d\d\w\d\d\.\w/ Laboratório de Bioinformática LNCC / MCT Agosto / 2002 .\w/ =~ /\w{2}\d{4}\w\d{2}\.\w/ =~ /$organ\d{4}\w\d{2}. $nomeSequencia = “XL1010A01.

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 .

“>$fileout” or die “Erro: $!\n”. “<$filein” or die “Erro: $!\n”.out ! Laboratório de Bioinformática LNCC / MCT Agosto / 2002 . $filein = $ARGV[0]. open FILEOUT..pl teste.. … Chamada perl programa.txt teste. $fileout = $ARGV[1].Argumentos ! Exemplo: ! Programa . open FILEIN.

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 .

Tom Christiansen. Jon Orwant O’Reilly & Associates.Referências ! Programming Perl ! ! ! Larry Wall. ISBN: 0-596-00027-8 Laboratório de Bioinformática LNCC / MCT Agosto / 2002 . Inc.