Você está na página 1de 57

PERL

Practical Extraction and Report Language

Um Pouco Sobre Perl


Perl uma linguagem poderosa e adaptvel a diversas situaes. Sua primeira verso foi desenvolvida por Larry Wall, um linguista que trabalhava para a NASA na dcada de 80 como administrador de sistemas. Era utilizada para facilitar o processamento de relatrios.

Um Pouco Sobre Perl


uma linguagem criada para processar e manipular textos. Nos dias atuais utilizada na administrao de sistemas, como interface para permitir a comunicao entre sistemas diferentes, na programao para a web, em bioinformtica, ou mesmo em desenvolvimento de aplicativos.

Um Pouco Sobre Perl


Na programao para web, Perl muito utilizada e popular por suas caractersticas de manipulao de texto e rpido desenvolvimento, tanto que chega a ser conhecida como a super fita crepe da internet. A interface de integrao de banco de dados de Perl suporta diversos bancos de dados como Oracle, Sybase, Postgres e MySQL.

Um Pouco Sobre Perl


Perl capaz de fazer o interfaceamento atravs de bibliotecas C/C++ externas atravs de XS ou SWIG. Perl pode trabalhar com HTML, XML e outras linguagens de marcao. Perl permite programao procedural ou orientada a objetos. Possui vrias bibliotecas disponveis atravs do CPAN.

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,")

Princpio de Perl: Coisas comuns devem ser simples e fceis.


(common things should be easy and simple.)

Algumas Aplicaes de Perl


TWiki - Sistema Wiki de escrita de contedo colaborativo. RT - Sistema de processamento de Tickets. Apache Spam Assassin - Sistema extensvel de filtro de Spam em email . Dev::rip - Programa para cpias de DVD. AWStats - "Advanced Web Statistics" (AWStats) um poderoso sistema de anlise de logs de servidores Web e de gerao de estatsticas.

Algumas Empresas que Usam Perl

Algumas Empresas que Usam Perl

Algumas Empresas que Usam Perl

Sintaxe e Cdigo
Strings: so 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 Cdigo
String entre aspas simples considerada literalmente. String entre aspas duplas interpretada. Exemplo:
Print Hello, \nWorld!; #exibe Hello, World!\n na tela. Print Hello, \nWorld!; #exibe Hello, #World! na tela.

Perl tambm usa \n, \t e \\ como C.

Sintaxe e Cdigo
Operadores Bsicos
Operadores de atribuio: ++, --, +=, -=, /= e *=. So os mesmos de C. Operadores de comparao: ==, != , <, >, <= e >=. So iguais aos de C. Operadores matemticos: +-*/. So iguais aos de C. Operador my: declarao de varivel. Exemplo:
my $hour;

Tambm poderia fazer:


my $i = 15;

Sintaxe e Cdigo
Operadores Bsicos
Perl no tem muita flexibilidade com relao a operadores de string. O nico operador bsico de string o de concatenao: . Exemplo:
my $a = "8"; # Observe as aspas. $a uma string. my $b = $a + "1"; # "1" uma string tambm. my $c = $a . "1"; # Mas $b e $c tm valores #diferentes!

Sintaxe e Cdigo
Operadores Bsicos
O sinal + usado para somar nmeros, enquanto que o . usado para concatenar strings. No exemplo anterior o valor de $b 9, enquanto o valor de $c 81. Perl faz a converso de maneira transparente. Se forem somadas coisas que no so nmeros, Perl far o possvel para convert-las em nmeros.

Sintaxe e Cdigo
Perl tem 3 tipos de variveis: escalares, vetores e hashes. Escalares: podem ser nmeros, letras ou strings. O nome de cada varivel escalar comea com $. Exemplo:
$nome = Henrique; $idade = 23; $letra = s;

No necessrio especificar para um escalar que est atribuda uma letra ou nmero, pois a converso automtica.

Sintaxe e Cdigo
Guardando string em escalar: usando aspas duplas, pode-se colocar uma varivel 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 Cdigo
Arrays: so conjuntos de escalares. Seus nomes comeam com @. A lista definida com parnteses. 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 Cdigo
Se um valor no existe, ele criado na atribuio. Exemplo:
my @winter_months = ("December", "January"); $winter_months[2] = "February";

Para saber o nmero 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 Cdigo
Hashes: so 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: dicionrio, mapa, etc. Os nomes das variveis hash comeam com %. Cada valor de hash separado por vrgula. Exemplo:
my %days_in_month = ( "July" => 31, "August" => 31, "September" => 30 );

Sintaxe e Cdigo
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 Cdigo
Para saber quais chaves esto no hash, usa-se a funo keys, que retorna uma lista (array) das chaves no hash. Exemplo:
my @month_list = keys %days_in_summer;

# O contedo de @month_list ('July', 'September', 'August').

Sintaxe e Cdigo
Os valores do hash no so sempre retornados na mesma ordem.

Os valores de um array so sempre retornados na mesma ordem.

Sintaxe e Cdigo
Condicionais
Perl possui dois operadores condicionais: if e unless. if: Executa o bloco seguinte se a condio for verdadeira. Funciona igual a C. unless: s executa o bloco seguinte se a condio testada for falsa, isto retorna verdadeiro somente se a condio testada for falsa.

Sintaxe e Cdigo
Condicionais
Exemplo:
if ($year_according_to_computer == 1900) { say "Y2K has doomed us all! Everyone to the compound."; } unless ($bank_account > 0) { say "I'm broke!"; }

Sintaxe e Cdigo
Condicionais
Tanto o if quanto o unless podem ser seguidos por else. O if tambm 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 Cdigo
Condicionais
unless ($pie eq 'apple') { say "Ew, I don't like $pie flavored pie."; } else { say "Apple! My favorite!"; }

Perl faz uso de condies ps-fixadas, isto condies de uma linha, que apresentam primeiro o que ser executado e depois a condio. 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 Cdigo
Laos de Repetio
for: semelhante a outras linguagens. Podese especificar os valores da sequncia, um intervalo ou um array ou hash. Exemplo:
for my $i (1, 2, 3, 4, 5) { say $i; }

Sintaxe e Cdigo
Laos de Repetio
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 Cdigo
Laos de Repetio
while: igual a C, repete o bloco seguinte enquanto a condio verdadeira, parando quando a condio for falsa. Exemplo:
my $count = 0; while ($count != 3) { $count++; say "Counting up to $count..."; }

Sintaxe e Cdigo
Laos de Repetio
until: semelhante a Pascal, repete o bloco seguinte enquanto a condio falsa, parando quando a condio for verdadeira. Exemplo:
my $count = 0; until ($count == 0) { $count--; say "Counting down to $count..."; }

Sintaxe e Cdigo
Sub
Sub o equivalente de Perl para o que em outras linguagens uma funo. Funciona assim:
sub <nome da sub> { <corpo da sub> return <valor a ser retornado> }

O uso do return no obrigatrio. Neste caso, o valor retornado o resultado da ltima sentena antes do fim da sub.

Sintaxe e Cdigo
Sub
O array @_ usado para guardar os valores que so passados como parmetros para a sub. Atravs do @_ os valores passados como parmetros so 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 Cdigo
Sub
Ao usar uma varivel com o my dentro de uma sub, a varivel considerada varivel local. possvel atribuir valor a vrias variveis em uma nica sentena. Exemplo:
sub multiply { my ($left, $right) = @_; return $left * $right; }

Expresses Regulares
Expresses regulares ou regex so o que Perl tem de melhor. So as ferramentas mais poderosas que Perl tem no tratamento de strings. So to poderosas e complexas que possvel escrever um livro inteiro sobre elas. difcil encontrar outras linguagens que usam expresses regulares como Perl.

Expresses Regulares
Ocorrncia simples de expresso: so as expresses regulares mais simples. Encontram uma ocorrncia de string dentro de outra, no importa a posio, retornando verdadeiro. So usadas com expresses condicionais. O operador =~ usado na verificao de strings com esse operador.

Expresses 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: So caracteres ou sequncias de caracteres que tm um significado especial.

Expresses Regulares
O \n um exemplo de metacaracter. Os metacaracteres mais simples so o ^e o $. ^indica incio de string. $ indica fim de string.

Expresses Regulares
Exemplo:
for my $line (<$urllist>) { print $line if $line =~ /^http:/ and $line =~ /html$/; # Se a linha comea em http: e termina em html, imprime }

Coringas: so metacaracters que substituem outros caracteres. O mais genrico deles o ponto .

Expresses Regulares
Dentro de uma expresso, ele encontra qualquer outro caracter exceto o de nova linha. Exemplo: /Mr./ encontra qualquer expresso que comece com Mr e tenha outros caracteres depois.

Expresses Regulares
Quantificadores de coringas: Indicam quantas vezes determinado caracter ou subespresso ocorre em uma string. Os quantificadores usados em Perl so:+, ?, *. +: encontra qualquer expresso que contenha uma ou mais ocorrncias do caracter ou metacaracter anterior a ele. Exemplo: /ab+c/ retorna abc, abbc, abbbc, etc.

Expresses Regulares
*: encontra qualquer expresso que contenha nenhuma ou mais ocorrncias do caracter ou metacaracter anterior a ele. Exemplo: /ab*c/ retorna ac, abc, abbc, abbbc, etc. ?: encontra qualquer expresso que contenha nenhuma ou uma ocorrncia do caracter ou metacaracter anterior a ele. Exemplo: /ab?c/ retorna ac, abc.

Expresses Regulares
Classes de Caracteres: so metacaracteres que encontram tipos especficos de caracteres. Exemplos: \d: encontra um dgito simples. \w: encontra um caracter de palavra simples (palavras que tenham letra, dgito ou underscore). \s: encontra um caracter de espao em branco (incluindo, \n \t e outros)

Expresses Regulares
\D: encontra qualquer coisa que no seja dgito. \W: encontra qualquer coisa que no seja palavra. \S: encontra qualquer coisa que no seja caracter de espao em branco. Exemplos de uso: /^\s+/ :encontra qualquer string que comece com caracter de espao em branco.

Expresses Regulares
/\w+/ : encontra qualquer string que contenha pelo menos uma palavra. say "Not a phone number!" unless $phone =~ /\d\d\d-\d\d\d\d/; say "Not a phone number!" unless $phone =~ /\d{3}\d{4}/; #verso alternativa para facilitar a leitura do cdigo. \d{3} : encontra exatamente 3 dgitos. \d{4} : encontra exatamente 4 dgitos.

Expresses Regulares
Definindo sua prpria classe de caracters: os caracteres que devem ser encontrados pela sua expresso devem estar entre colchetes. Exemplo:[aeiou] retorna apenas vogais. /b[aeiou]g/ vai retornar bag,beg,big,bog ou bug. O - d uma sequncia de caracteres. Exemplo: [a-f]:pega os caracters de a a f. Combinao de classes de caracteres com quantificadores: Usados para encontrar mais de uma ocorrncia dos caracteres buscados.

Expresses Regulares
Exemplo:
say "This string contains at least two vowels in a row." if $string =~ /[aeiou]{2}/;

flags: alteram o comportamento padro 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;

Expresses Regulares
flag \x: permite o uso de espaos em branco e comentrios dentro de expresses regulares. Exemplo:
my ($time, $hours, $minutes, $seconds) = $string =~ /( # capture entire match (\d{1,2}) # one or two digits for the hour :

Expresses 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.

Expresses 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"; }

Expresses Regulares
A expresso /idiot|dope|twit|llama/ retorna verdadeiro se "idiot," "dope," "twit" or "llama" estiver presente em qualquer lugar da string testada. Subespresso: permite que a string onde houve ocorrncia da subexpresso seja armazenada na varivel especial $1. Subexpresses so dadas entre parnteses.

Expresses 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 expresso regular contm mais de uma expresso, elas so armazenadas em variveis como $1, $2, $3, etc.

Expresses 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 verso

Verso Insana
''=~( .('`' .'==' ^'+') .';-' .('[' .'_\\{' ).(('`')| ).('['^'/') '\\"'.('['^ '{'^"\[").( ('{'^'[').( '`'|"\%").( '\\"\\}'.+( '+_,\\",'.( '`'|"\+").( '{'^"\[").( '[').("\["^ ')').("\["^ '.').("\`"| '+').("\!"^ '`'|('%')). '(?{' |'!') .('[' .'||' .'-'. ^'.') .'(\\$' '/').').' .('['^'/'). '#').'!!--' '`'|"\"").( '`'|"\/").( '{'^"\[").( '['^"\+").( '{'^('[')). '`'|"\%").( '`'|"\$").( '+').("\`"| '/').("\{"^ '.').("\`"| '+').'\\"'. '++\\$="})' .('`' .('`' ^'+') .(';' '\\$' .('`' .';=('. .'\\"'.+( ('`'|',').( .'\\$=.\\"' '`'|"\%").( '`'|"\.").( '['^"\,").( '['^"\)").( ('\\$;!').( '{'^"\[").( '`'|"\/").( '!').("\["^ '[').("\`"| '$')."\,".( ('['^',').( );$:=('.')^ |'%') |',') .('`' &'=') .'=;' |'"') '\\$=|' '{'^'['). '`'|('%')). .('{'^'['). '`'|"\%").( '{'^"\[").( '`'|"\!").( '`'|"\)").( '!'^"\+").( '`'|"\/").( '['^"\,").( '(').("\["^ '!').("\["^ '!'^('+')). '`'|"\(").( '~';$~='@'| .('[' .'"'. |'/') .(';' .('[' .('!' ."\|".( ('`'|'"') '\\".\\"'.( ('`'|'/').( '['^(')')). '['^"\/").( '`'|"\,").( '`'|"\.").( '{'^"\/").( '`'|"\.").( '`'|('.')). '(').("\{"^ ')').("\`"| '\\",_,\\"' '`'|"\)").( '(';$^=')'^ ^'-') '\\$' .('[' &'=') ^'(') ^'+') '`'^'.' .('`'|'/' '['^('(')). '`'|"\&").( '\\").\\"'. '`'|"\(").( '`'|(',')). '['^('/')). '`'|"\!").( '`'|"\%").( ','.(('{')^ '[').("\`"| '/').("\["^ .'!'.("\!"^ '`'|"\,").( '[';$/='`';

Segunda Verso
Verso Padro
$nBottles = $ARGV[0]; $nBottles = 100 if $nBottles eq || $nBottles < 0; foreach (reverse(1 .. $nBottles)) { $s = ($_ == 1) ? : s; $oneLessS = ($_ == 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$oneLessS of beer on the wall\n"; } print "\n*burp*\n";

Referncias
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.C3.B3dulos_e_framew orks