PERL Practical Extraction and Report Language Um Pouco

  • Slides: 57
Download presentation
PERL Practical Extraction and Report Language

PERL Practical Extraction and Report Language

Um Pouco Sobre Perl • Perl é uma linguagem poderosa e adaptável a diversas

Um Pouco Sobre Perl • Perl é uma linguagem poderosa e adaptável a diversas situações. • Sua primeira versão foi desenvolvida por Larry Wall, um linguista que trabalhava para a NASA na década de 80 como administrador de sistemas. Era utilizada para facilitar o processamento de relatórios.

Um Pouco Sobre Perl • É uma linguagem criada para processar e manipular textos.

Um Pouco Sobre Perl • É uma linguagem criada para processar e manipular textos. • Nos dias atuais é utilizada na administração de sistemas, como interface para permitir a comunicação entre sistemas diferentes, na programação para a web, em bioinformática, ou mesmo em desenvolvimento de aplicativos.

Um Pouco Sobre Perl • Na programação para web, Perl é muito utilizada e

Um Pouco Sobre Perl • Na programação para web, Perl é muito utilizada e popular por suas características de manipulação de texto e rápido desenvolvimento, tanto que chega a ser conhecida como a “super fita crepe” da internet. • A interface de integração de banco de dados de Perl suporta diversos bancos de dados como Oracle, Sybase, Postgres e My. SQL.

Um Pouco Sobre Perl • Perl é capaz de fazer o interfaceamento através de

Um Pouco Sobre Perl • Perl é capaz de fazer o interfaceamento através de bibliotecas C/C++ externas através de XS ou SWIG. • Perl pode trabalhar com HTML, XML e outras linguagens de marcação. • Perl permite programação procedural ou orientada a objetos. • Possui várias bibliotecas disponíveis através do CPAN.

Um Pouco Sobre Perl • O slogan de Perl é: "Há mais de uma

Um Pouco Sobre Perl • O slogan de Perl é: "Há mais de uma maneira de se fazer as coisas. “ ("There's more than one way to do it, ") • Princípio de Perl: “Coisas comuns devem ser simples e fáceis. “ (common things should be easy and simple. )

Algumas Aplicações de Perl • TWiki - Sistema Wiki de escrita de conteúdo colaborativo.

Algumas Aplicações de Perl • TWiki - Sistema Wiki de escrita de conteúdo colaborativo. • RT - Sistema de processamento de Tickets. • Apache Spam Assassin - Sistema extensível de filtro de Spam em email. • Dev: : rip - Programa para cópias de DVD. • AWStats - "Advanced Web Statistics" (AWStats) é um poderoso sistema de análise de logs de servidores Web e de geração de estatísticas.

Algumas Empresas que Usam Perl

Algumas Empresas que Usam Perl

Algumas Empresas que Usam Perl

Algumas Empresas que Usam Perl

Algumas Empresas que Usam Perl

Algumas Empresas que Usam Perl

Sintaxe e Código • Strings: são apresentadas entre aspas, duplas ou simples. Exemplo: Programa

Sintaxe e Código • Strings: são apresentadas entre aspas, duplas ou simples. Exemplo: Programa Hello, World!: say “Hello, World!”; #exibe na tela a string Hello, World e #insere uma nova linha. Isto é equivalente a: say ‘Hello, World!’; #exibe na tela a string Hello, World e #insere uma nova linha.

Sintaxe e Código • String entre aspas simples é considerada literalmente. • String entre

Sintaxe e Código • String entre aspas simples é considerada literalmente. • String entre aspas duplas é interpretada. • Exemplo: Print ‘Hello, n. World!’; #exibe Hello, World!n na tela. Print “Hello, n. World!“; #exibe Hello, #World! na tela. • Perl também usa n, t e \ como C.

Sintaxe e Código Operadores Básicos • Operadores de atribuição: ++, --, +=, -=, /=

Sintaxe e Código Operadores Básicos • Operadores de atribuição: ++, --, +=, -=, /= e *=. São os mesmos de C. • Operadores de comparação: ==, != , <, >, <= e >=. São iguais aos de C. • Operadores matemáticos: +-*/. São iguais aos de C. • Operador my: declaração de variável. • Exemplo: my $hour; Também poderia fazer: my $i = 15;

Sintaxe e Código Operadores Básicos • Perl não tem muita flexibilidade com relação a

Sintaxe e Código Operadores Básicos • Perl não tem muita flexibilidade com relação a operadores de string. O único operador básico de string é o de concatenação: . Exemplo: my $a = "8"; # Observe as aspas. $a é uma string. my $b = $a + "1"; # "1" é uma string também. my $c = $a. "1"; # Mas $b e $c têm valores #diferentes!

Sintaxe e Código Operadores Básicos • O sinal + é usado para somar números,

Sintaxe e Código Operadores Básicos • O sinal + é usado para somar números, enquanto que o. é usado para concatenar strings. • No exemplo anterior o valor de $b é 9, enquanto o valor de $c é 81. • Perl faz a conversão de maneira transparente. • Se forem somadas coisas que não são números, Perl fará o possível para convertê-las em números.

Sintaxe e Código • Perl tem 3 tipos de variáveis: escalares, vetores e hashes.

Sintaxe e Código • Perl tem 3 tipos de variáveis: escalares, vetores e hashes. • Escalares: podem ser números, letras ou strings. O nome de cada variável escalar começa com $. Exemplo: $nome = “Henrique”; $idade = 23; $letra = “s”; • Não é necessário especificar para um escalar que está atribuída uma letra ou número, pois a conversão é automática.

Sintaxe e Código • Guardando string em escalar: usando aspas duplas, pode-se colocar uma

Sintaxe e Código • Guardando string em escalar: usando aspas duplas, pode-se colocar uma variável no meio da string que ela será interpretada. Exemplo: use feature ': 5. 10'; my $apple_count = 5; my $count_report = "There are $apple_count apples. "; say "The report is: $count_report"; Na tela será exibido: The report is: There are 5 apples.

Sintaxe e Código • Arrays: são conjuntos de escalares. • Seus nomes começam com

Sintaxe e Código • Arrays: são conjuntos de escalares. • Seus nomes começam com @. A lista é definida com parênteses. Exemplo: my @lotto_numbers = (1, 2, 3, 4, 5, 6); my @months = ("July", "August", "September"); • O funcionamento de arrays em Perl é semelhante a C e outras linguagens. Exemplo: my @months = ("July", "August", "September"); say $months[0]; # Isto imprime "July". $months[2] = "March"; # September foi renomeado para March

Sintaxe e Código • Se um valor não existe, ele é criado na atribuição.

Sintaxe e Código • Se um valor não existe, ele é criado na atribuição. Exemplo: my @winter_months = ("December", "January"); $winter_months[2] = "February"; • Para saber o número de elementos em um array, basta atribuí-lo a um escalar: Exemplo: my @months = ("July", "August", "September"); my $month_count = @months; say $month_count; # This prints 3. my @autumn_months; # no elements my $autumn_count = @autumn_months; say $autumn_count; # this prints 0

Sintaxe e Código • Hashes: são conjuntos de pares de dados nos quais um

Sintaxe e Código • Hashes: são conjuntos de pares de dados nos quais um dos valores é uma chave e o outro é um valor qualquer. • Cada chave é única em todo o conjunto. Exemplos: dicionário, mapa, etc. • Os nomes das variáveis hash começam com %. Cada valor de hash é separado por vírgula. Exemplo: my %days_in_month = ( "July" => 31, "August" => 31, "September" => 30 );

Sintaxe e Código • Para obter ou modificar um valor de hash deve-se referenciá-lo

Sintaxe e Código • Para obter ou modificar um valor de hash deve-se referenciá-lo assim: $hashname{key}. Exemplo: say $days_in_month{September}; #imprime 30 na tela $days_in_month{February} = 29;

Sintaxe e Código • Para saber quais chaves estão no hash, usa-se a função

Sintaxe e Código • Para saber quais chaves estão no hash, usa-se a função keys, que retorna uma lista (array) das chaves no hash. Exemplo: my @month_list = keys %days_in_summer; # O conteúdo de @month_list é ('July', 'September', 'August').

Sintaxe e Código • Os valores do hash não sempre retornados na mesma ordem.

Sintaxe e Código • Os valores do hash não sempre retornados na mesma ordem. • Os valores de um array são sempre retornados na mesma ordem.

Sintaxe e Código Condicionais • Perl possui dois operadores condicionais: if e unless. •

Sintaxe e Código Condicionais • Perl possui dois operadores condicionais: if e unless. • if: Executa o bloco seguinte se a condição for verdadeira. Funciona igual a C. • unless: só executa o bloco seguinte se a condição testada for falsa, isto é retorna verdadeiro somente se a condição testada for falsa.

Sintaxe e Código Condicionais • Exemplo: if ($year_according_to_computer == 1900) { say "Y 2

Sintaxe e Código Condicionais • Exemplo: if ($year_according_to_computer == 1900) { say "Y 2 K has doomed us all! Everyone to the compound. "; } unless ($bank_account > 0) { say "I'm broke!"; }

Sintaxe e Código Condicionais • Tanto o if quanto o unless podem ser seguidos

Sintaxe e Código Condicionais • Tanto o if quanto o unless podem ser seguidos por else. O if também pode ser seguido por elsif e depois por else. Exemplo: if ($a == 5) { say "It's five!"; } elsif ($a == 6) { say "It's six!"; } else { say "It's something else. "; }

Sintaxe e Código Condicionais unless ($pie eq 'apple') { say "Ew, I don't like

Sintaxe e Código Condicionais unless ($pie eq 'apple') { say "Ew, I don't like $pie flavored pie. "; } else { say "Apple! My favorite!"; } • Perl faz uso de condições pós-fixadas, isto é condições de uma linha, que apresentam primeiro o que será executado e depois a condição. Exemplo: say "I'm leaving work early!" if $day eq 'Friday'; say "I'm burning the 7 pm oil" unless $day eq 'Friday';

Sintaxe e Código Laços de Repetição • for: é semelhante a outras linguagens. Podese

Sintaxe e Código Laços de Repetição • for: é semelhante a outras linguagens. Podese especificar os valores da sequência, um intervalo ou um array ou hash. Exemplo: for my $i (1, 2, 3, 4, 5) { say $i; }

Sintaxe e Código Laços de Repetição my @one_to_ten = (1. . 10); my $top_limit

Sintaxe e Código Laços de Repetição my @one_to_ten = (1. . 10); my $top_limit = 25; for my $i (@one_to_ten, 15, 20. . $top_limit) { say $i; } for my $i (keys %month_has) { say "$i has $month_has{$i} days. "; } for my $marx ('Groucho', 'Harpo', 'Zeppo', 'Karl') { say "$marx is my favorite Marx brother. "; }

Sintaxe e Código Laços de Repetição • while: é igual a C, repete o

Sintaxe e Código Laços de Repetição • while: é igual a C, repete o bloco seguinte enquanto a condição é verdadeira, parando quando a condição for falsa. Exemplo: my $count = 0; while ($count != 3) { $count++; say "Counting up to $count. . . "; }

Sintaxe e Código Laços de Repetição • until: é semelhante a Pascal, repete o

Sintaxe e Código Laços de Repetição • until: é semelhante a Pascal, repete o bloco seguinte enquanto a condição é falsa, parando quando a condição for verdadeira. Exemplo: my $count = 0; until ($count == 0) { $count--; say "Counting down to $count. . . "; }

Sintaxe e Código Sub • Sub é o equivalente de Perl para o que

Sintaxe e Código Sub • Sub é o equivalente de Perl para o que em outras linguagens é uma função. Funciona assim: sub <nome da sub> { <corpo da sub> return <valor a ser retornado> } • O uso do return não é obrigatório. Neste caso, o valor retornado é o resultado da última sentença antes do fim da sub.

Sintaxe e Código Sub • O array @_ é usado para guardar os valores

Sintaxe e Código Sub • O array @_ é usado para guardar os valores que são passados como parâmetros para a sub. • Através do @_ os valores passados como parâmetros são lidos e manipulados dentro da sub. Exemplo: sub multiply { my (@ops) = @_; return $ops[0] * $ops[1]; } for my $i (1. . 10) { say "$i squared is ", multiply($i, $i); }

Sintaxe e Código Sub • Ao usar uma variável com o my dentro de

Sintaxe e Código Sub • Ao usar uma variável com o my dentro de uma sub, a variável é considerada variável local. • É possível atribuir valor a várias variáveis em uma única sentença. Exemplo: sub multiply { my ($left, $right) = @_; return $left * $right; }

Expressões Regulares • Expressões regulares ou regex são o que Perl tem de melhor.

Expressões Regulares • Expressões regulares ou regex são o que Perl tem de melhor. • São as ferramentas mais poderosas que Perl tem no tratamento de strings. • São tão poderosas e complexas que é possível escrever um livro inteiro sobre elas. • É difícil encontrar outras linguagens que usam expressões regulares como Perl.

Expressões Regulares • Ocorrência simples de expressão: são as expressões regulares mais simples. •

Expressões Regulares • Ocorrência simples de expressão: são as expressões regulares mais simples. • Encontram uma ocorrência de string dentro de outra, não importa a posição, retornando verdadeiro. • São usadas com expressões condicionais. • O operador =~ é usado na verificação de strings com esse operador.

Expressões Regulares Exemplo: my $user_location = "I see thirteen black cats under a ladder.

Expressões Regulares Exemplo: my $user_location = "I see thirteen black cats under a ladder. "; say "Eek, bad luck!" if $user_location =~ /thirteen/; • A string a ser buscada fica entre barras /<string>/. • Metacaracters: São caracteres ou sequências de caracteres que têm um significado especial.

Expressões Regulares • • O n é um exemplo de metacaracter. Os metacaracteres mais

Expressões Regulares • • O n é um exemplo de metacaracter. Os metacaracteres mais simples são o ^e o $. ^indica início de string. $ indica fim de string.

Expressões Regulares • Exemplo: for my $line (<$urllist>) { print $line if $line =~

Expressões Regulares • Exemplo: for my $line (<$urllist>) { print $line if $line =~ /^http: / and $line =~ /html$/; # Se a linha começa em http: e termina em html, imprime } • Coringas: são metacaracters que substituem outros caracteres. • O mais genérico deles é o ponto.

Expressões Regulares • Dentro de uma expressão, ele encontra qualquer outro caracter exceto o

Expressões Regulares • Dentro de uma expressão, ele encontra qualquer outro caracter exceto o de nova linha. Exemplo: /Mr. / encontra qualquer expressão que comece com Mr e tenha outros caracteres depois.

Expressões Regulares • Quantificadores de coringas: Indicam quantas vezes determinado caracter ou subespressão ocorre

Expressões Regulares • Quantificadores de coringas: Indicam quantas vezes determinado caracter ou subespressão ocorre em uma string. • Os quantificadores usados em Perl são: +, ? , *. • +: encontra qualquer expressão que contenha uma ou mais ocorrências do caracter ou metacaracter anterior a ele. Exemplo: /ab+c/ retorna abc, abbbc, etc.

Expressões Regulares • *: encontra qualquer expressão que contenha nenhuma ou mais ocorrências do

Expressões Regulares • *: encontra qualquer expressão que contenha nenhuma ou mais ocorrências do caracter ou metacaracter anterior a ele. Exemplo: /ab*c/ retorna ac, abbc, abbbc, etc. • ? : encontra qualquer expressão que contenha nenhuma ou uma ocorrência do caracter ou metacaracter anterior a ele. Exemplo: /ab? c/ retorna ac, abc.

Expressões Regulares • Classes de Caracteres: são metacaracteres que encontram tipos específicos de caracteres.

Expressões Regulares • Classes de Caracteres: são metacaracteres que encontram tipos específicos de caracteres. Exemplos: • d: encontra um dígito simples. • w: encontra um caracter de palavra simples (palavras que tenham letra, dígito ou underscore). • s: encontra um caracter de espaço em branco (incluindo, n t e outros)

Expressões Regulares • D: encontra qualquer coisa que não seja dígito. • W: encontra

Expressões Regulares • D: encontra qualquer coisa que não seja dígito. • W: encontra qualquer coisa que não seja palavra. • S: encontra qualquer coisa que não seja caracter de espaço em branco. Exemplos de uso: • /^s+/ : encontra qualquer string que comece com caracter de espaço em branco.

Expressões Regulares • /w+/ : encontra qualquer string que contenha pelo menos uma palavra.

Expressões Regulares • /w+/ : encontra qualquer string que contenha pelo menos uma palavra. say "Not a phone number!" unless $phone =~ /dddd/; say "Not a phone number!" unless $phone =~ /d{3}d{4}/; #versão alternativa para facilitar a leitura do código. • d{3} : encontra exatamente 3 dígitos. • d{4} : encontra exatamente 4 dígitos.

Expressões Regulares • Definindo sua própria classe de caracters: os caracteres que devem ser

Expressões Regulares • Definindo sua própria classe de caracters: os caracteres que devem ser encontrados pela sua expressão devem estar entre colchetes. Exemplo: [aeiou] retorna apenas vogais. /b[aeiou]g/ vai retornar bag, beg, big, bog ou bug. • O - dá uma sequência de caracteres. Exemplo: [a-f]: pega os caracters de a a f. • Combinação de classes de caracteres com quantificadores: Usados para encontrar mais de uma ocorrência dos caracteres buscados.

Expressões Regulares Exemplo: say "This string contains at least two vowels in a row.

Expressões Regulares Exemplo: say "This string contains at least two vowels in a row. " if $string =~ /[aeiou]{2}/; • flags: alteram o comportamento padrão de uma regex. • Exemplo: i desliga o case-sensitive. my $greet = "Hey everybody, it's Bob and David!"; say "Hi, Bob!" if $greet =~ /bob/i;

Expressões Regulares • flag x: permite o uso de espaços em branco e comentários

Expressões Regulares • flag x: permite o uso de espaços em branco e comentários dentro de expressões regulares. Exemplo: my ($time, $hours, $minutes, $seconds) = $string =~ /( # capture entire match (d{1, 2}) # one or two digits for the hour :

Expressões Regulares (d{2}) # two digits for the minutes : (d{2}) # two digits

Expressões Regulares (d{2}) # two digits for the minutes : (d{2}) # two digits for the seconds ) /x; • Se quiser checar mais de uma coisa de uma vez, pode-se usar o caracter | para separar coisas diferentes.

Expressões Regulares Exemplo: my @email_lines = ("Dear idiot: ", "I hate you, you twit.

Expressões Regulares Exemplo: my @email_lines = ("Dear idiot: ", "I hate you, you twit. You're a dope. ", "I bet you mistreat your llama. ", "Signed, Doug"); for my $check_line (@email_lines) { if ($check_line =~ /idiot|dope|twit|llama/) { say "Be careful! This line might contain something offensive: n$check_line"; }

Expressões Regulares A expressão /idiot|dope|twit|llama/ retorna verdadeiro se "idiot, " "dope, " "twit" or

Expressões Regulares A expressão /idiot|dope|twit|llama/ retorna verdadeiro se "idiot, " "dope, " "twit" or "llama" estiver presente em qualquer lugar da string testada. • Subespressão: permite que a string onde houve ocorrência da subexpressão seja armazenada na variável especial $1. • Subexpressões são dadas entre parênteses.

Expressões Regulares Exemplo: for my $check_line (@email_lines) { if ($check_line =~ /(idiot|dope|twit|llama)/) { say

Expressões Regulares Exemplo: for my $check_line (@email_lines) { if ($check_line =~ /(idiot|dope|twit|llama)/) { say "Be careful! This line contains the offensive word '$1': n$check_line"; } • Se sua expressão regular contém mais de uma expressão, elas são armazenadas em variáveis como $1, $2, $3, etc.

Expressões Regulares Exemplo: my $name = 'Wall, Larry'; $name =~ /(w+), (w+)/; # $1

Expressões Regulares Exemplo: my $name = 'Wall, Larry'; $name =~ /(w+), (w+)/; # $1 contains last name, $2 contains first name $name = "$2 $1"; # $name now contains "Larry Wall"

99 Bottles of Beer Primeira versão

99 Bottles of Beer Primeira versão

Segunda Versão Padrão $n. Bottles = $ARGV[0]; $n. Bottles = 100 if $n. Bottles

Segunda Versão Padrão $n. Bottles = $ARGV[0]; $n. Bottles = 100 if $n. Bottles eq ‘’ || $n. Bottles < 0; foreach (reverse(1. . $n. Bottles)) { $s = ($_ == 1) ? “” : “s”; $one. Less. S = ($_ == 2) ? “” : “s”; print "n$_ bottle$s of beer on the wall, n"; print "$_ bottle$s of beer, n"; print "Take one down, pass it around, n"; print $_ - 1, “ bottle$one. Less. S of beer on the walln"; } print "n*burp*n";

Referências • http: //www. perl. com/pub/a/2008/04/23/a-beginnersintroduction-to-perl-510. html • http: //www. wellho. net/mouth/969_Perl-and-. html •

Referências • http: //www. perl. com/pub/a/2008/04/23/a-beginnersintroduction-to-perl-510. html • http: //www. wellho. net/mouth/969_Perl-and-. html • http: //www. perlmonks. org/? node_id=641994 • http: //perl. about. com/od/perltutorials/a/foreachloop. htm • http: //perldoc. perl. org/perlvar. html • http: //news. oreilly. com/2008/06/a-beginners-introductionto-pe. html • http: //rio. pm. org/quem_usa. pl#empresas • http: //pt. wikipedia. org/wiki/Perl#M. C 3. B 3 dulos_e_framew orks