CURSO DE VERÃO EM BIOINFORMÁTICA ESTRUTURAL PERL Raquel C. de Melo Minardi [email protected] Primeiro programa em perl Abra um editor de texto e escreva o programa A primeira linha deveria ser $!/usr/bin/perl para informar ao sistema que isto é um programa em perl e para informar o caminho para o interpretador perl no sistema Unix Escreva o código, por exemplo print “Este é meu primeiro programa em perl.”; Salve com a extensão .pl Dê permissão de execução chmod +x programa.pl Execute o programa chamando ./programa.pl ou perl programa.pl Raquel C. de Melo Minardi 2/88 Primeiro programa em perl Ao digitar ./programa.pl ou perl programa.pl o programa será interpretado Se há erros de sintaxe no código, o interpretador irá informar e não executará o programa Raquel C. de Melo Minardi 3/88 Primeiro programa em perl Raquel C. de Melo Minardi 4/88 Primeiro programa em perl A opção –w na linha #!/usr/bin/perl é uma condição de permissão de alertas (allow warnings) e é muito útil na depuração do seu código Comumente usa-se também a linha use strict; que indica que o interpretador irá checar os nomes das variáveis para verificar se foram anteriormente declaradas Raquel C. de Melo Minardi 5/88 Variáveis Variáveis são nomes associados a posições de memória que pode conter valores Em perl, variáveis escalares podem conter números (inteiros ou de ponto flutuante) ou cadeias de caracteres (strings) e são identificadas por começarem com “$” $a, $b e $resultado são exemplos de variáveis Nomes de variáveis válidos começam com uma letra e a seguir têm uma sequência de letras números e underscores $a $nome $primeiro_nome $ultimoNome $bloco12 $c22e Raquel C. de Melo Minardi 6/88 Estados de variáveis Variáveis em perl têm três estados exists: variável foi declarada mas não tem valor defined: variável têm um valor que pode ser true ou false true: variável tem valor diferente de 0 ou “” Raquel C. de Melo Minardi 7/88 Literais e atribuições Literais são valores constantes como 2, 5 e “palavra”, por exemplo Valores são atribuídos a variáveis através do símbolo “=” $resultado = $a + $b; $t = “palavra”; Raquel C. de Melo Minardi 8/88 Números Internamente, os números são sempre armazenados em ponto flutuante mas há várias possíveis representações $a $a $a $a $a $a = 134; = -2004; = 56.79; – 56.78989; = 13e34; = -12E29; NUNCA COMEÇE UM NÚMERO COM ZERO! O NÚMERO SERÁ RECONHECIDO COMO UM NÚMERO EM OCTAL Raquel C. de Melo Minardi 9/88 Caracteres especiais Raquel C. de Melo Minardi 10/88 Operadores Perl suporta as operações aritméticas básicas Operador Raquel C. de Melo Minardi Operação + Adição - Subtração * Multiplicação / Divisão ** Exponenciação % Módulo 11/88 Operadores Parênteses podem ser usados para se indicar precedência diferente da padrão Existem abreviações para os operadores Raquel C. de Melo Minardi Operador Abreviação $k = $k + 2 $k += 2 $k = $k - 2 $k -= 2 $k = $k * 2 $k *= 2 $k = $k / 2 $k /= 2 12/88 Operadores Raquel C. de Melo Minardi 13/88 Cadeias de caracteres (strings) Strings são sequências de caracteres Strings são delimitadas por aspas duplas A string mais curta é “” A string mais longa é tão comprida quanto a memória do computador permitir Raquel C. de Melo Minardi 14/88 Operadores para strings A concatenação é a operação mais conhecida entre strings O operador é o “.” A função length é uma função predefinida que retorna o comprimento de uma string Raquel C. de Melo Minardi 15/88 Cadeias de caracteres Raquel C. de Melo Minardi 16/88 Cadeias de caracteres Raquel C. de Melo Minardi 17/88 Strings entre aspas Certos caracteres quando precedidos de contrabarra entre aspas duplas têm um siginifcado especial \n → nova linha \t → tabulação Variáveis são interpolaladas quando dentro de aspas duplas Se você quer usar “ como um literal dentro de uma string entre aspas duplas, use \” Raquel C. de Melo Minardi 18/88 Função split A função split quebra uma string de acordo com a posição de um conjunto de delimitadores O delimitador é escrito entre barras: /PADRÃO/ Raquel C. de Melo Minardi 19/88 Função split Raquel C. de Melo Minardi 20/88 Função split Raquel C. de Melo Minardi 21/88 Função split Raquel C. de Melo Minardi 22/88 Função split Raquel C. de Melo Minardi 23/88 Função substr A função substr extrai uma substring de uma string Recebe três argumentos: uma string a posição inicial o número de caracteres a serem retornados a partir da posição inicial Raquel C. de Melo Minardi 24/88 Função substr Raquel C. de Melo Minardi 25/88 Função substr Raquel C. de Melo Minardi 26/88 Interpolação Raquel C. de Melo Minardi 27/88 Interpolação Raquel C. de Melo Minardi 28/88 Entrada pelo console <STDIN> denota a entrada padrão Durante a execução de um programa perl, toda vez que <STDIN> é invocado, o programa para e espera que o usuário digite uma sequência de caracteres seguida de enter <STDIN> conterá então a sequência lida e pode ser atribuído a um escalar Raquel C. de Melo Minardi 29/88 Entrada pelo console Raquel C. de Melo Minardi 30/88 Impressão formatada A função printf permite formatar a uma impressão Especificando o número de casas decimais de um número Estabelecendo uma estrutura tabular através da inclusão de espaços e tabulações printf FILEHANDLE FORMATO, LISTA FORMATO contém uma string de controle LISTA contém a lista de variáveis que serão impressas segundos os formatos estabelecidos Raquel C. de Melo Minardi 31/88 Impressão formatada Raquel C. de Melo Minardi 32/88 Impressão formatada Raquel C. de Melo Minardi 33/88 Arranjos Como visto, uma variável numérico ou uma string Um arranjo é uma estrutura de dados composta e pode ser heterogênea Ele contém uma lista de valores numéricos, ou uma lista de strings ou uma mistura deles A ordem é importante escalar contém um valor Em perl, arranjos são definidos com um símbolo “@” antes do nome Portanto, em um mesmo programa podemos ter uma variável escalar $var e um arranjo @var Raquel C. de Melo Minardi 34/88 Arranjos Raquel C. de Melo Minardi 35/88 Arranjos Raquel C. de Melo Minardi 36/88 Arranjos A função push adiciona um valor ao final de uma arranjo A função shift recupera o primeiro valor de um arranjo A função pop recupera o último valor de um arranjo Raquel C. de Melo Minardi 37/88 Arranjos Raquel C. de Melo Minardi 38/88 Arranjos Raquel C. de Melo Minardi 39/88 Arranjos A função pré-definida sort ordena elementos de uma arranjo $a<=>$b : para comparação entre números cmp : para comparação entre strings 0 se são iguais 1 se $a>$b -1 se $b>$a Raquel C. de Melo Minardi 40/88 Arranjos Raquel C. de Melo Minardi 41/88 Arquivos A conexão entre um programa perl e arquivos de entrada e saída são os filehandles Diferentemente das variáveis, filehandles não tem um prefixo definido mas são normalmente escritos com letras maiúsculas Antes de se utilizar um filehandle, ele deve ser aberto: open (IF, $nomeArquivoEntrada): abertura para leitura open (OF, “>$nomeArquivoSaida”): abertura para escrita open (OF, “>>$nomeArquivoSaida”): abertura para escrita Fechar após o uso close(IF) Raquel C. de Melo Minardi 42/88 Arquivos É recomendado testar sempre se a abertura do arquivo foi realizada com sucesso e usar a função die para encerrar o programa caso algum problema tenha ocorrido open (IF, $nomeArquivoEntrada) or die (“Não foi possível abrir o arquivo”); Raquel C. de Melo Minardi 43/88 Arquivos Raquel C. de Melo Minardi 44/88 Arquivos Raquel C. de Melo Minardi 45/88 Arquivos Raquel C. de Melo Minardi 46/88 Arquivos Raquel C. de Melo Minardi 47/88 Arquivos Raquel C. de Melo Minardi 48/88 Arquivos Raquel C. de Melo Minardi 49/88 Estruturas de controle Estruturas de controle são aquelas que podem alterar o fluxo de execução do programa Há basicamente dois mecanismos: Estruturas condicionais Estruturas de repetição Raquel C. de Melo Minardi 50/88 Estrutura condicional Raquel C. de Melo Minardi 51/88 Estrutura condicional Raquel C. de Melo Minardi 52/88 Estruturas de controle Os principais operadores a serem utilizados nas expressões são: Operador Números Strings Igualdade == eq Desigual != ne Menor que < lt Maior que > gt Menor ou igual <= le Maior ou igual >= ge Raquel C. de Melo Minardi 53/88 Estrutura condicional Raquel C. de Melo Minardi 54/88 Estrutura de repetição Raquel C. de Melo Minardi 55/88 Estrutura de repetição Raquel C. de Melo Minardi 56/88 Estrutura de repetição Raquel C. de Melo Minardi 57/88 Estrutura de repetição Raquel C. de Melo Minardi 58/88 Expressões regulares Expressões regulares são mecanismos que permitem ao programa ler um texto e identificar padrões no mesmo Raquel C. de Melo Minardi 59/88 Expressão regular Raquel C. de Melo Minardi 60/88 Expressão regular CARACTERES ESPECIAIS Caracter Combina com O mesmo que \d dígito [0-9] \D Não-dígito [^0-9] \w Caracter alfanumérico [a-zA-Z0-9_] \W Caracter não alfanumérico [^a-zA-Z0-9_] \s Espaços em branco [ \t\n\r\f] \S Caracter não espaço [^ \t\n\r\f] Raquel C. de Melo Minardi 61/88 Expressão regular QUANTIFICADORES Quantificador Significado {n} Ocorre exatamente n vezes {n,m} Ocorre pelo menos n e no máximo m vezes {n,} Ocorre pelo menos n vezes * Ocorre 0 ou mais vezes + Ocorre 1 ou mais vezes ? Ocorre 0 ou 1 vez Raquel C. de Melo Minardi 62/88 Expressões regulares O “.” é um caracter especial que substitui qualquer caracter Raquel C. de Melo Minardi 63/88 Expressão regular Raquel C. de Melo Minardi 64/88 Expressão regular Para ignorar a diferença entre maiúsculas e minúsculas usase um “i” no final Raquel C. de Melo Minardi 65/88 Expressão regular Para casar pelo menos um entre vários padrões, separá-los com “|” Raquel C. de Melo Minardi 66/88 Expressões regulares Pode-se ainda ancorar um padrão no início ou fim de uma string usando: \^PADRÃO\ : início \PADRÃO$\ : fim Raquel C. de Melo Minardi 67/88 Expressão regular Raquel C. de Melo Minardi 68/88 Expressão regular Raquel C. de Melo Minardi 69/88 Expressão regular Raquel C. de Melo Minardi 70/88 Expressões regulares Quando usamos expressões regulares, perl tenta casar o maior padrão possível (estratégia gulosa) Para tentar casar o menor (estratégia preguiçosa), usar um “?” Raquel C. de Melo Minardi 71/88 Expressão regular Raquel C. de Melo Minardi 72/88 Expressões regulares Pode-se usar expressões regulares para substituir um padrão em uma string $string =~ s/PADRÃO/NOVA_STRING/ $string =~ s/PADRÃO/NOVA_STRING/i : case insensitive $string =~ s/PADRÃO/NOVA_STRING/g : global Raquel C. de Melo Minardi 73/88 Expressão regular Raquel C. de Melo Minardi 74/88 Expressões regulares Símbolos especiais como \, |, (, ), [, {, ^, $, *, +, ?, . devem ser colocados após a barra Raquel C. de Melo Minardi 75/88 Funções Funções recebem um conjunto de parâmetros, realizam um conjunto de operações e retornam um valor Nomes de funções seguem as mesmas convenções dos nomes de variáveis Podem ser colocadas em qualquer lugar do programa Variáveis podem ser declaradas com my no interior de funções Raquel C. de Melo Minardi 76/88 Funções Raquel C. de Melo Minardi 77/88 Funções Raquel C. de Melo Minardi 78/88 Funções Raquel C. de Melo Minardi 79/88 Funções Todas as variáveis de um programa podem ser vistas e acessadas no interior das funções Quando declaramos variáveis no interior de funções, elas sobrescrevem as globais em seu interior Raquel C. de Melo Minardi 80/88 Funções Raquel C. de Melo Minardi 81/88 Hashes Um hash é uma variável que armazena uma coleção de pares (chave, valor), arranjados de tal forma que é possível recuperar um valor a partir de sua chave A ordem não é importante Também chamados de arranjos associativos Raquel C. de Melo Minardi 82/88 Hash Possíveis formas de se inicializar um hash Raquel C. de Melo Minardi 83/88 Hash Raquel C. de Melo Minardi 84/88 Hash Acesso a posições de um hash através das chaves Raquel C. de Melo Minardi 85/88 Hash Imprimindo todos os valores de um hash através das chaves Raquel C. de Melo Minardi 86/88 Hash Raquel C. de Melo Minardi 87/88 Hash Raquel C. de Melo Minardi 88/88