Vous êtes sur la page 1sur 13

Perl Practical Extraction and Report Language Introduo Perl (Practical Extraction and Report Language) uma linguagem

em de programao de uso geral, de alto nvel e fcil aprendizagem, implementvel nas principais plataformas quase todas as distribuies de UNIX trazem o Perl como padro do sistema. As verses para Windows e Mac tambm so perfeitas, aproveitando as caractersticas destas plataformas. Possui recursos poderosos para processamento de textos, interao com o sistema operacional e com a rede, alm de facilidades como gerenciamento automtico de memria e converso inteligente e automtica de tipos. Apesar de se apresentar como uma linguagem de scripts, seus executveis funcionam compilados em tempo real, sendo rpidos e poderosos. Esta caracterstica facilita muito o trabalho do programador, pois os programas podem ser desenvolvidos, modificados e testados muito facilmente e sem a perda de tempo inerente aos procedimentos de compilao de executveis. Outra grande vantagem o Perl possuir, embutido no compilador, um depurador de excelente funcionamento. Estes motivos tornaram o Perl a linguagem preferida para a programao de aplicaes que rodam em servidores da Internet. Os administradores de sistemas UNIX, em especial, precisam dominar a linguagem, j que muitos utilitrios do sistema so baseados em Perl ou o usam ostensivamente.

Histria do Perl Em 1986, Larry Wall era um programador de sistemas da National Security Agency - NASA, ao qual havia sido delegada a responsabilidade de construir um sistema de controle e administrao com a capacidade de produzir relatrios para uma rede de computadores UNIX. Insatisfeito com as ferramentas disponveis para o trabalho inventou uma nova linguagem. Tal linguagem tinha como objetivo integrar caractersticas das linguagens awk linguagem com poderosos recursos para manipulao de strings e expresses regulares que facilitam a gerao de relatrios e sed uma ferramenta de edio e filtragem de streams que complementa awk do UNIX com a estrutura oferecida por shell a linguagem de linha de comando para scripts do UNIX. Ele queria que a linguagem fosse poderosa e flexvel o suficiente para manipular diretamente os recursos do computador, como C, mas suficientemente simples para que os programas pudessem ser criados prottipos rapidamente. Ele se inspirou em seus conhecimentos de lingustica para torna-la uma linguagem natural, tal como uma linguagem humana, que utiliza redundncia e contexto para possibilitar a expresso de ideias de maneiras diferentes. O princpio norteador era simplesmente

tornar "fceis as coisas fceis e possveis as coisas difceis". Em 1987, Wall anuncia a verso 0 de sua linguagem, a Practical Extraction and Report Language - PERL, para a Usenet. Ele optou por liberar o Perl como uma linguagem com cdigo aberto permitindo aos usurios modific-la e estend-la. Flexvel, portvel e eficiente, o Perl comeou a ganhar apoio entre a comunidade de cdigo aberto medida que encontrava uso em cada vez mais aplicaes. As sucessivas verses foram incorporando as sugestes de usurios quanto a correes e expanses, e ela cresceu alm de seus recursos originais de processamento de texto. Os usurios criaram muitas extenses modulares, algumas das quais eram mais tardes incorporadas ao cdigo fonte padro. Desde o incio, a linguagem foi sendo continuamente atualizada e, apesar disso, permaneceu to estvel que os desenvolvedores programaram projetos inteiros utilizando verses betas em desenvolvimento. A verso 3 do Perl adotou a licena GNU General Public License - GPL e a verso 4 adotou uma Artistic License, para atrair mais usurios. As duas licenas protegem a natureza gratuita e de cdigo aberto, mas a Artistic License permite que o Perl seja embutido em produtos proprietrios sob certas condies. O Perl 5 foi uma grande reorganizao que consertou muitas das limitaes da linguagem, tornando-a mais poderosa, mais legvel e mais extensvel. Ela havia crescido de uma ferramenta de processamento de textos para uma linguagem de programao de propsito geral. A esta altura no podia mais ser administrada predominantemente por Wall. Consequentemente, ele delegou o desenvolvimento e a documentao para a comunidade de cdigo aberto, e tambm para a comunidade comercial, deixando a linguagem se expandir em todas as direes. A utilidade, velocidade, flexibilidade e portabilidade de Perl tornaram-na ideal para a Worl Wide Web. Sendo uma linguagem baseada em processamento de texto, adaptvel para manipular o meio baseado em textos da Web. extremamente eficaz no uso com o protocolo Common Gateway Interface - CGI, que possibilita que servidores da Web interajam com outras aplicaes e passem sua sada para aplicaes clientes sob a forma de contedo dinmico. O protocolo CGI quase instantaneamente transformou Perl de uma obscura ferramenta de administrao de sistemas na mais amplamente utilizada linguagem de programao do lado dos servidores. Ao longo da dcada de 90, o Perl e outros projetos de cdigo aberto, incluindo o Linux e Apache, uniram-se para formar um movimento pelo cdigo aberto. Seu objetivo era construir uma comunidade a favor do cdigo aberto coesa, eficiente e funcional, que iria disseminar suas ideias e inovaes pelo mundo inteiro.

Em 18 de julho de 2000, Lary Wall anunciou o incio do desenvolvimento da verso 6, uma reescrita completa das partes internas e externas alm de corrigir dois grandes problemas da verso 5: cdigo interno convulsionado e compatibilidade com verses anteriores. O Perl 6 ser mais extensvel, com recursos tais como threading, tratamento de sinais e Unicode um conjunto de caracteres padro que pode representar a maior parte das linguagens faladas do mundo. No ser compatvel com a verso 5. Entretanto, espera-se que ainda tenha o jeito da verso 5. Para Larry Wall, o Perl 6 deve tornar as coisas fceis ainda mais fceis, as coisas difceis mais fceis e as coisas impossveis difceis.

Comprehensive Perl Archive Network CPAN O Perl uma linguagem extensvel, de modo que milhares de mdulos diferentes tm sido escritos por Perl Monks desenvolvedores Perl por todo o mundo. Os mdulos so definidos em arquivos com extenso .pm. O principal centro de distribuio de cdigo fonte, mdulos e documentao de Perl o Comprehensive Perl Archive Network CPAN www.cpan.org, que espelhado por sites na Web por todo o mundo.

Curiosidades Dois ditados muito populares na comunidade regem a filosofia Perl. O primeiro afirma que as qualidades de um bom programador so preguia, impacincia e orgulho. Este dito parece sem sentido, mas pode ser explicado. Programadores preguiosos no gostam de inventar a roda, de modo que escrevero cdigos que seja reutilizvel e aplicvel em tantos lugares possveis. Programadores impacientes no querem fazer manualmente o que podem conseguir que o computador faa automaticamente. Portanto, escrevem cdigos para executar estas tarefas, tornando os programas mais funcionais. Finalmente, os programadores precisam de orgulho, para que exibam seu cdigo para seus amigos. Para que seus amigos o entendam, no entanto, eles devm escrev-lo claramente. Consequentemente, um programador com estas caractersticas ir escrever cdigo reutilizvel, completo e legvel. O segundo ditado, Existe mais de uma maneira de faz-lo, reflete o amor da comunidade Perl liberdade, bem como a filosofia natural da linguagem. No existe uma maneira certa de escrever um programa em Perl, porque assim como uma pessoa pode expressar a mesma idia de maneiras diferentes utilizando linguagem natural, pode-se escrever o mesmo programa de maneiras

diferentes utilizando Perl. Programas em Perl podem ser aprimorados para qualquer qualidade que se deseje, tal como velocidade, clareza, usabilidade ou flexibilidade. Outro fato interessante adoo de um camelo como smbolo do Perl, isso devido ao primeiro livro escrito por Larry Wall possuir tal animal na capa. Este livro ficou conhecido como Camel Book. Mas, segundo Larry Wall, o fato de ser camelo, porque camelo pode andar durante dias.... Perl uma das linguagens de programao existentes mais altamente portveis. Ela foi originalmente desenvolvida em UNIX, mas desde ento se espalhou para muitas outras plataformas. Um programa em Perl pode ser portado de um sistema operacional para outro, sem nenhuma modificao, e ainda funcionar adequadamente. Existem, portes disponveis na CPAN para sistemas operacionais no suportados na distribuio padro.

Fundamentos da Linguagem Introduo O Perl uma linguagem de programao muito poderosa, mas a linguagem de fcil aprendizagem. Apresenta caractersticas muito parecidas com C, sed, awk e shell do UNIX. Suas melhores caractersticas esto relacionadas ao tratamento automtico da memria, converso automtica de tipos e grande facilidade no processamento de texto.

Sintaxe O Perl possui um esquema de notao que se aproxima muito do usado em C, possuindo ainda diversas caractersticas do Basic, awk e sed. A estrutura de inicializao do programa assume algo muito prximo do Pascal. Com o uso dos mdulos, entretanto, o Perl pode assumir a feio de outras linguagens, como Tk ou Lisp. Como em C, no Perl os comandos precisam ser terminados com um ; ponto e vrgula. Comentrios precisam ser precedidos por # sustenido.
#!/usr/bin/perl # O comando abaixo imprime uma saudao print "Ola, Bem vindo a Fatec\n";

Sada na tela:
Ola, Bem vindo a Fatec

Na primeira linha utilizamos o comentrio especial #!/usr/bin/perl que indica ao sistema operacional o local onde est o interpretador do Perl. Na segunda linha temos um comentrio simples e na terceira linha, o texto que ser impresso. Como se pode observar, o texto que ser impresso deve estar envolvido por aspas simples ou duplas. Quanto ao comando print, ele tem o mesmo conceito em algoritmos quando usamos escreva e imprima, ou seja, ir imprimir no terminal o que esta dentro das aspas. O caractere de nova linha representado pelo escape \n. No existe necessidade de se manter o comando em uma nica linha. O escape \n poderia ser substitudo pelo caractere literal de nova linha, dentro das aspas. O comando abaixo teria efeito idntico:
#!/usr/bin/perl # O comando abaixo imprime uma saudao print "Ola, Bem vindo a Fatec! " ;

Sada na tela:
Ola, Bem vindo a Fatec!

Tipos de Dados O Perl define 3 tipos de dados: Scalar Dados scalar podem ser nmeros, caracteres e referncias. O compilador saber diferenciar que operao realizar, em cada caso. Na dvida o valor ser considerado como caractere. Da mesma forma um escalar numrico interpolado em um caractere assumir o tipo caractere. Dados do tipo scalar so precedidas por $ cifro.
#!/usr/bin/perl $numero = "5"; print "Digite um numero: "; $input=getc(); $soma = $numero + $input; $string = "\nNumero digitado: $input\nSomar com

scalar escalar; array matriz; hash matriz associativa.

: $numero

\nResultado print $string;

: $soma\n";

Sada na tela:
Digite um numero: 3 Numero digitado: 3 Somar com : 5 Resultado : 8

Um dado scalar pode armazenar nmeros inteiros, dupla preciso, com ou sem sinal, notao cientfica, decimal, hexa, octal e binrio. Caracteres devem ser delimitados por aspas simples ou aspas duplas. Caracteres delimitados por aspas dupla podem conter variveis interpoladas ou caracteres especiais.
#!/usr/bin/perl $faculdade= "Fatec"; $aspas_simples = 'Tecnologia?\nVenha para a $faculdade.'; $aspas_duplas = "Tecnologia?\nVenha para a $faculdade."; print $aspas_simples, ".\n"; print "---------------\n"; print $aspas_duplas, "\n";

Sada na tela:
Tecnologia?\nVenha para a $faculdade. ---------------Tecnologia? Venha para a Fatec.

Repare que o primeiro e o ltimo comando print usa uma vrgula para separar os seus dois argumentos. Se for preciso colocar uma aspa simples em um dados com caracteres delimitados por aspas simples, ser necessrio usar um escape \ antes desta. Escalares podem ainda armazenar um valor que diz onde encontrar outro valor. Este tipo de dado chamado de referncia. As referncias apontam indiretamente para os valores.

Arrays Armazenam listas ou vetores de escalares. Cada elemento do array pode ser lido usando-se o seu ndice numrico entre colchetes. O ndice do primeiro elemento 0. Dados d tipo array so precedidos por @ arroba.

Listas so colees de escalares. Listas de literais ou variveis podem ser construdas com os elementos separados por vrgulas e envolvidos por parnteses e podem ser atribudas a arrays ou a listas de variveis.
@array = ('texto',$foo,8,"var interpolada: $foo"); # Atribuindo uma lista de literais a uma lista de variveis: ($ouro, $prata, $bronze) = ("dourado", "prateado", "bronzeado");

Tambm podemos atribuir um array a uma lista de variveis escalares.


#!/usr/bin/perl @data = (13,6,2010); ($dia,$mes,$ano)=@data; print "So Paulo, ", $dia, "/", $mes, "/", $ano;

Sada na tela:
So Paulo, 13/6/2010

Se atribuirmos um array a um dado escalar, estaremos passando o seu tamanho, um inteiro.


#!/usr/bin/perl @data = (13,6,2010); $tamanho=@data; print $tamanho;

Sada na tela:
3

Hashs So colees de escalares referenciados por uma chave. So precedidos pelo sinal de percentagem (%) e so declarados da seguinte forma:
%Hash=(fruta,pera,massa,lasanha,liquido,vinho);

O comando abaixo produziria o mesmo efeito:


%Hash=( fruta => pera, massa => lasanha, liquido => vinho );

Ou ainda:
$Hash{fruta} = pera; $Hash{massa} = lasanha; $Hash{liquido} = vinho;

Para acessar os dados de um hash precisamos usar o valor da chave entre chaves { e }.
print $Hash{"fruta"}, "\n";

Sada na tela:
pera

Estruturas de controle O Perl oferece quatro tipos de estruturas de deciso. A estrutura if estrutura de deciso simples que executa uma ao se uma condio for verdadeira ou pula a ao se a condio for falsa. A estrutura unless, que o oposto da estrutura if, ou seja, executa uma ao se a condio for falsa e pula a ao se a condio for verdadeira. A estrutura if/else estrutura de deciso dupla que executa uma ao dentre duas aes diferentes, dependendo da condio, e a estrutura if/elsif/else estrutura de deciso mltipla que executa uma ao dentre muitas aes diferentes. O Perl ainda oferece seis tipos de estruturas de repetio, so elas while, until, do/while, do/until, for e foreach.

Estrutura de deciso simples Em Perl existem duas estruturas de condio simples: if e unless. Estas estruturas so utilizadas quando temos que executar uma ao que depende de uma condio. O comando if pode ser escrito da seguinte maneira:
#!/usr/bin/perl $media = 7; if ($media >= 6) { print "APROVADO\n"; }

Observe que no existe ponto-e-vrgula aps a chave de fechamento. Todas as estruturas de controle em Perl seguem esta sintaxe. O Perl oferece alguma flexibilidade na escrita de estruturas de controle. Se somente uma ao deve ser executada quando uma condio for satisfeita, como um comando de impresso, o Perl permite que o cdigo seja escrito da seguinte maneira:
#!/usr/bin/perl $media = 7; print "APROVADO\n" if $media >= 6;

J o comando unless pode ser escrito da seguinte maneira:


#!/usr/bin/perl $media = 5; unless ($media >= 6) { print "REPROVADO\n"; }

Ou, alternativamente, da seguinte maneira:


#!/usr/bin/perl $media = 5; print "REPROVADO\n" unless $media >= 6;

Estrutura de deciso dupla e mltipla A estrutura de deciso if/else permite ao programador especificar que uma ao seja executada quando a condio for verdadeira e uma outra quando a condio for falsa. A estrutura de deciso if/else pode ser escrita da seguinte maneira:
#!/usr/bin/perl $media = 6; if ($media >= 6) { print "APROVADO\n"; } else { print "REPROVADO\n"; }

O Perl oferece o operador condicional ?:, que bastante semelhante estrutura if/else, sendo este o nico operador ternrio aceita trs operando do Perl. Os operando juntos com o operador condicional, formam uma expresso condicional. O primeiro operando a condio, o segundo operando o valor para a expresso caso a condio seja verdadeira e o terceiro o valor para a expresso caso a condio seja falsa. Uma expresso condicional pode ser escrita da seguinte maneira:
#!/usr/bin/perl $media = 6; print ($media >= 6 ? "APROVADO\n" : "REPROVADO\n");

A estrutura de deciso if/elsif/else utilizada quando precisamos testar vrias condies e pode ser escrita da seguinte maneira:
#!/usr/bin/perl $media = 6; if($media >= 6){ print "APROVADO\n"; } elsif ($media < 4) { print "REPROVADO\n";

} else { print "RECUPERAO\n"; }

Estruturas de repetio Uma estrutura de repetio permite ao programador especificar que uma ao dever ser repetida enquanto alguma condio permanece verdadeira ou falsa. Exemplo de estrutura while que encontra a primeira potncia de 2 maior que 1000.
#!/usr/bin/perl $produto = 2; while ($produto <= 1000){ $produto = 2 * $produto; } print $produto;

Exemplo de estrutura until que imprime a primeira potncia de 2 maior que 1000.
#!/usr/bin/perl $produto = 2; until ($produto > 1000){ $produto = 2 * $produto; } print $produto;

Exemplo de estrutura do/while que imprime os nmeros de 1 at 10.


#!/usr/bin/perl $cont = 1; do { print "$cont "; } while (++$cont <= 10); print "\n";

Exemplo de estrutura do/until que imprime os nmeros de 1 at 10.


#!/usr/bin/perl $cont = 1; do { print "$cont "; } until (++$cont > 10); print "\n";

A estrutura for muito parecido com a estrutura while. O exemplo seguinte imprime os nmeros de 1 at 10.
#!/usr/bin/perl for ($i = 1; $i <= 10; ++$i) { print "$i\n"; }

A estrutura foreach uma estrutura especial, com ela possivel ler uma linha de uma matriz ou de um arquivo. No exemplo abaixo temos uma lista de filmes brasileiros e utilizamos a estrutura foreach para imprimir esta lista. Note que a cada repetio, um elemento da lista lido e armazenado na varivel $nome. Se a lista fosse vazia, os comandos dentro do bloco no seriam executados.
#!/usr/bin/perl @filmes = ("Central do Brasil", "Gmeas", "Bossa Nova", "Villa-Lobos"); $i = 1; foreach $nome (@filmes) { print $i++, " - $nome\n"; }

Sub-rotinas Um bloco de comandos nomeado com o comando sub define uma sub-rotina ou funo. Para executar a sub-rotina basta preceder seu nome por um & ou ainda seu nome sucedido de parntesis ( e ), como no exemplo abaixo:
#!/usr/bin/perl &oi_turma; oi_turma(); sub oi_turma { print "Oi, Turma!!\n\n"; }

Sada na tela:
Oi, Turma!! Oi, Turma!!

Variveis especiais Em Perl, existe um conjunto predefinido de variveis que se encontram disponveis ao programador, e que possuem diversas funcionalidades. Abaixo listamos algumas das mais importantes: $_ scalar usado automaticamente em muitas funes e operadores, caso nenhuma varivel seja especificada. $. $/ $, $" nmero da linha corrente do arquivo que est sendo lido. separador de linha de entrada padro: \n. string que ser impressa entre elementos de array. String que impressa entre elementos de array, mas quando estes so interpretados entre

aspas. $| $! $? $@ $$ $0 $ARGV $|=1: para fazer autoflush; $|=0: para fazer buffering dos filehandles. String que expressa o ltimo erro de sistema que aconteceu. Valor retornado status por comandos externos que tenham sido lanados via Perl. Erro do ltimo eval. PID do processo corrente. Nome do programa que esta sendo executado. Nome do arquivo corrente que est sendo lido via <>.

@ARGV Argumentos dados ao perl, $ARGV[0] o primeiro argumento. @_ %ENV Os argumentos passados a uma sub-rotina, so recebidos neste array. Acesso s variveis de ambiente, ex: print $ENV{PATH};

Exemplo da varivel especial $_:


#!/usr/bin/perl @disciplinas=("Algoritmos","Ingls","Arquitetura","tica","Matemtica"); foreach (@disciplinas) { print "Disciplinas : $_\n"; }

Exemplo da varivel especial @_


#!/usr/bin/perl $num=soma(2,5); print "Soma: $num\n"; sub soma { @dados=@_; $A=$dados[0]; $B=$dados[1]; $resposta=$A+$B; return $resposta; }

Expresses Regulares O processamento de texto uma das mais poderosas capacidades do Perl. A manipulaes de textos em Perl conseguida com expresses regulares sequencias de caracteres usadas para pesquisar ao longo de arquivos de textos banco de dados. As expresses regulares permitem que

sejam feitas pesquisas complexas usando expresses relativamente simples. Por se tratar de um assunto extremamente longo, ser mostrado apenas um exemplo simples usando expresses regulares.
#!/usr/bin/perl print "digite algum nome,numero\n"; chomp(my $valor=<STDIN>); if($valor =~ /\w/) { print "voc digitou \"$valor\" ou seja uma palavra\n"; } if($valor =~ /\d/) { print "voc digitou \"$valor\" ou seja um numero\n"; }

Vous aimerez peut-être aussi