Você está na página 1de 12

Descrio da Linguagem de Script Perl

Cludio Rodolfo Sousa de Oliveira Cincias da Computao Universidade Estadual do Sudoeste da Bahia (UESB). Estrada do Bem Querer Km 04 Vitria da Conquista BA Brasil.
claudiorodolfo@yahoo.com.br

Abstract. The language Perl was originally a combination of the sh and of the awk. Perl was developed significantly since its beginning and he became a language of powerful programming, although a primitive amount. Nevertheless her still to frequently be called scripting language, we preferred you imagine it as a programming it finds strange, but it completes. From the coming of the Word Wide Web, the popularity of Perl grew drastically, why is she mainly almost ideal for programming of Common Gateway Interface (CGI). Perl is implemented with a hybrid system, but it is compiled partially to detect mistakes before the interpretation and to simplify the interpreter. Resumo. A linguagem Perl era originalmente uma combinao das linguagens sh e awk. Ela desenvolveu-se significativamente desde seu incio e tornou-se uma linguagem de programao poderosa, ainda que um tanto primitiva. Mesmo ela sendo chamada freqentemente de linguagem de script, prefervel imagina-la como uma programao estranha, mas completa. Desde o advento da Internet, a popularidade da Perl cresceu drasticamente, principalmente por ela ser muito utilizada para programao de Commom Gateway Interface (CGI). A linguagem implementada com um sistema hbrido, sendo parcialmente compilada para detectar erros antes da interpretao e para simplificar o interpretador.

1. Introduo
Uma linguagem flexvel, portvel e eficiente, Perl comeou a ganhar apoio entre a comunidade de cdigo aberto medida que encontrava uso em cada vez mais aplicaes. Sucessivas verses de Perl incorporaram as sugestes de usurios quanto a correes e expanses, e ela cresceu alm de seus recursos originais de processamento de texto. Usurios de Perl criaram muitas extenses modulares para Perl, algumas das quais eram mais tarde integradas ao cdigo fonte bsico. Desde o incio at Perl 4, a linguagem foi sendo continuamente atualizada e, apesar disso, permaneceu to estvel que os desenvolvedores programaram projetos inteiros usando verses de desenvolvimento. Perl 3 adotou a General Public License (GNU) e Perl 4 adotou uma Artistic License, para atrair mais usurios. As duas licenas protegem a natureza gratuita e de cdigo aberto de Perl, mas a Artistic License permite que Perl seja embutida em produtos proprietrio sob certas condies. 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 com seu prprio ambiente de desenvolvimento de software completo. A esta altura, ela no podia mais ser administrada predominantemente por Wall. Conseqentemente, ele delegou o desenvolvimento e a documentao de Perl para pessoas por toda a comunidade de cdigo aberto, e tambm para alguns na comunidade comercial, deixando a linguagem se expandir livremente e todas as direes. A utilidade, velocidade, flexibilidade e portabilidade de Perl tornaram-na ideal pra a Internet. Sendo uma linguagem baseada em processamento de texto, adaptvel para manipular o meio baseados em textos Web. Perl particularmente eficaz no uso com o protocolo Commom Gateway Interface (CGI), que possibilitam que servidores da Web interajam com outras aplicaes e passem sua sada para aplicaes clientes sob a forma de contedo dinmico. O advento do protocolo CGI quase instantaneamente transformou Perl de uma obscura ferramenta de administrao de sistemas na mais amplamente utilizada linguagem de programao no lado dos servidores. Ao longo da dcada de 90, Perl e outros projetos de cdigo aberto, incluindo seus companheiros de cdigo aberto, 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 idias e inovaes pelo mundo inteiro. Em 18 de julho de 2000, Larry Wall anunciou o inicio do desenvolvimento de Perl 6, uma escrita completa das partes internas e externas de Perl. Perl 6 ir corrigir 2 grandes problemas de Perl 5: cdigo interno convulsionado e compatibilidade com verses anteriores. 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 no mundo. Perl 6 no ser compatvel com Perl 5. Entretanto esperasse que Perl 6 ainda tenha o jeito de Perl 5. Perl 6, mas palavras de Larry Wall, deve tornar as coisas fceis ainda mais fceis, as coisas difceis mais fceis e as coisas impossveis difceis.

2. A Biblioteca da Perl
Perl uma linguagem extensvel modularmente, de modo que mirades de mdulos (pedaos de softwares reutilizveis) tem sido escritos por desenvolvedores de Perl por todo mundo. Mdulos de Perl so definidos em bibliotecas terminadas por .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 da Web por todo mundo. Subdiretrios do diretrio principal incluem aqueles que contem softwares indexados por autor, documentao, mdulos, portes para sistemas operacionais no suportados na distribuio-padro, scripts e o cdigo fonte propriamente dito, que podem ser baixados atravs de FTP annimo. Os usurios de Active Perl Uma implementao de Perl para Windows criado pela ActiveState Tool Corporation podem usar a Perl Package Manager (PPM) para encontrar e instalar mdulos.

3. Codificao da Linguagem
Na linguagem de programa Perl o smbolo # usado para indicar um comentrio de apenas uma linha, os smbolos #! uma construo chamada shebang que indica o caminho (path) para o interpretador Perl, no Linux a linha 1 poderia ser #/usb/bin/perl,

por exemplo, a linha 4 instrui o computador a imprimir a seguinte string de caracteres Hello World!. Um exemplo destas construes pode ser visto na Figura 1. 1 #!c:\arquiv~1\perl\bin\perl.exe 2 #Primeiro programa em Perl 3 #include <iostream> 4 print Hello World!;
Figura 1 Cdigo Fonte Exemplo da Linguagem Perl.

Um identificador uma srie de caracteres consistindo em letras, dgitos, ou sublinhados (_) que no comea com um digito. Perl sensvel a maisculas e minsculas isto , ela trata letras maisculas e minsculas como caracteres diferentes assim $soma e $Soma so identificadores diferentes.

4. Escopo de variveis
O escopo de um identificador parte do programa na qual o identificador pode ser mencionado. Alguns identificadores podem ser mencionados ao longo de todo um programa; outros podem ser mencionados a partir de pores limitadas de um programa. Os trs escopos para um identificador so escopos global, lxico e dinmico. As maiorias das variveis usadas nos programas so globais, isto , existem ao longo de toda a execuo do programa e podem ser manipuladas em qualquer parte do programa. Uma varivel de escopo lxico uma varivel que existe somente dentro do bloco no qual foi definida. aquele que existe desde o momento que foi criada at o fim de execuo do programa. Essas variveis podem ser acessadas tanto no bloco em que foram definidas, quanto de qualquer sub-rotina chamada a partir daquele bloco. O programa a seguir demonstra aspectos de escopo com variveis globais, lxicas e dinmicas.

1. #!c:\arquiv~1\perl\perl.exe 2. #Demonstrando o escopo de variveis 3. 4. #Chama sub1 antes de variveis globais serem definidas 5. print Sem globais\n; 6. sub1(); 7. 8. #define variveis globais 9. our $x = 7; 10. our $y = 17; 11. 12. Chama sub1 para ver resultados com variveis globais definidas 13. print \nCom globais\n; 14. print \n\$x global: $x; 15. print \n\$y global: $y; 16. sub1(); 17. print \n\$x global: $x; 18. print \n\$x global: $y; 19. 20. #sub1 exibe suas prprias variveis #x (escopo lxico) e $y (escopo dinmico) 21. #e depois chama sub2 22. 23. sub sub1 24. { 25. my $x = 10; 26. local $y = 5; 27. print \$x em sub1: $x (lexical para sub1)\n; 28. print \$y em sub1: $x (dinmica para sub1)\n; 29. sub2(); 30. } 31. 32. #sub2 exibe $x global e $y de sub1 que tem escopo dinmico 33. sub sub2 34. { 35. print \$x em sub2: $x (global)\n; 36. print \$y em sub2: $x (dinmica para sub1)\n; 37. }
Figura 2 Cdigo demonstrando o escopo de variveis.

A sada referente a este programa :

$x em sub1: 10 (lxica para sub1) $y em sub1: 5 (dinmica para sub1) $x em sub2: (global) $y em sub2: 10 (dinmica para sub1) Com globais: $x global = 7 $y global = 17 $x em sub1: 10 (lxica para sub1) $y em sub1: 5 (dinmica para sub1) $x em sub2: 7 (lxica para sub1) $y em sub2: 5 (dinmica para sub1) $x global = 7 $y global = 17 Sem globais:
Figura 3 Sada impressa referente a execuo do programa da Figura 2.

As palavras chave our, my e local determinam o escopo de uma varivel, our define explicitamente a varivel como global, my define a varivel com escopo lxico e local define a varivel com escopo dinmico.

5. Tipos de Dados
5.1. Valores e variveis escalares O termo escalar, quando usado em um contexto cientifico ou matemtico, referese a um valor simples ou singular que no pode ser subdividido em componentes menores. Similarmente, valores escalares em Perl so blocos de construes mais simples para dados em Perl. Valores escalares em Perl so geralmente classificados como nmeros ou strings. Um valor escalar numrico pode ser inteiro, um nmero em ponto flutuante ou nmero em notao cientifica. Os nmeros tambm podem estar em formato binrio, octal ou hexadecimal. Valores escalares tipo string tambm podem ser subdivididos em strings entre apostrofes (para caracteres) ou entre aspas (para seqncia de caracteres). Uma varivel escalar assim denominada porque contem um valor escalar. Nomes de variveis escalares sempre comeam com um cifro ($). O cifro deve ser seguido por um identificador vlido. 5.2. Lista Uma lista em Perl, um conjunto de valores. Para criarmos uma lista, separe uma srie de valores por virgula e coloque a lista entre parnteses, (). O que segue um exemplo de uma lista de strings em Perl pode ser visto na Figura 4. (cachorro, gato, cavalo)
Figura 4 Exemplo de uma lista de dados em Perl.

5.3. Array

Uma varivel array armazena uma lista de escalares. Cada array pode guardar 0 ou mais escalares individuais.Cada elemento individual de um array tem um nmero de posio (ou ndice), que usado para acessar (ou fazer referencia a) aquele elemento. A diferena bsica entre uma lista e um array que um array uma varivel com nome, enquanto, uma lista considerada uma constante. Um array representado por @nome_da_variavel_tipo_array, exemplo @c. Para voc acessar um elemento particular de um array deve se fornecer o nome do array (precedido por $ e no @), seguido pelo nmero da posio do elemento particular, entre colchetes ([ ]). Em todos os arrays o primeiro elemento o elemento de ordem zero. Assim o primeiro elemento do array @c $c[0] e o stimo $c[6], usa-se o $ no lugar do @ pra referenciar apenas uma posio do array porque cada posio um escalar. Pode-se criar e j inicializar um array, exemplo: @array = (Al, 289, casa, 16.345 );
Figura 5 Exemplo de um array de dados em Perl.

este array tem subscritos de $array[0] $array[3]. 5.4. Hash Hash um tipo de dado que armazena vrios valores (no escalar), tambm chamado de array associativo. Em vez de acessar um elemento da tabela hash com um subscrito como em um array, elementos da tabela hash so acessados com uma string conhecida como chave. Cada chave deve ser nica. Para definir uma tabela hash usa-se o smbolo (%), uma tabela hash ocupa mais espao que um array, mas sua busca bem mais eficiente, sendo que quase sempre se localiza um elemento em uma nica operao. Cria-se uma tabela hash da seguinte forma, %nome_da_variavel_tipo_hash, exemplo: %c = (nome => Cludio, segundo_nome => Rodolfo, sobrenome => Sousa);
Figura 6 Exemplo de um hash de dados em Perl.

Pra acessar um elemento da tabela basta colocar o nome do hash precedido de $ e em seguida o nome da chave entre chaves, por exemplo: $c{nome} 5.5. Classe A interface de uma classe consiste nos mtodos da classe e da sintaxe para chamlos. Define se uma classe em Perl da seguinte forma:

1. Package nome_da_classe; 2. use package1; 3. use packageN; 4. declarao_de_variaveis; 5. sub metodo1 6. { 7. comando(s) 8. } 9. sub metodoN 10. { 11. comando(s); 12. } 13. return1;
Figura 7 Exemplo de uma classe em Perl.

Para voc acessar algum mtodo da classe a sintaxe a seguinte: NomedoObjeto->mtodo(argumentos); Para criar um nome Objeto preceda da seguinte maneira $objeto = nem nome_da_classe;

6. Expresses e instrues de atribuio


Perl oferece diversos operadores de atribuio, atribuies simples seriam $c = $d; $c = $a + $b; Note que as variveis so do tipo escalares mas no necessariamente precisam ser do mesmo subtipo, pois variveis escalares so genricas. Se $c fosse interpretado como uma string e $a como um inteiro e $b como um numero em ponto flutuante a atribuio ocorreria sem problema. H tambm a disposio do programador diversos operadores de atribuio para abreviar operaes aritmticas em expresses de atribuio. Por exemplo o comando $c = $c + 3; pode ser abreviado com o operador de atribuio de adio += como $c += 3; O operador += soma o valor da expresso direita do operador ao valor da varivel esquerda do operador e armazena o resultado na varivel esquerda do operador. Assim como operador de atribuio soma Perl possui tambm os seguintes operadores -= Atribuio de subtrao *= Atribuio de multiplicao **= %= /= Atribuio de exponenciaco Atribuio de mdulo Atribuio de diviso

Sendo que o funcionamento de cada um anlogo ao do operador de atribuio de adio, s que ao invs de somar eles executam a operao referente ao primeiro smbolo antes do igual. 6.1. Ordem de avaliao (Precedncia) Como na figura X, parnteses so avaliados primeiro, a exponenciaco avaliada em segundo lugar, a multiplicao, diviso ou mdulo so avaliados em terceiro lugar e a soma ou subtrao so avaliados por ultimo. () Parnteses ** Exponenciaco *, / ou % Multiplicao, Diviso ou Mdulo + ou Soma ou Subtrao Com exceo da exponenciaco que se houver mais de uma so avaliados da direita para a esquerda, os demais em caso de aparecer varias vezes so avaliados da esquerda pra direita.

7. Estruturas de Controle
7.1. Estruturas de seleo Uma estrutura de seleo usada para se escolher entre cursos de ao alternativos. Por exemplo, suponha que um vendedor de computadores deve vender 50 computadores por ms para atingir sua quota. O comando em pseudocdigo Se computadores vendidos forem maiores que ou iguais a 50 Imprima Recebeu bonificao! Determina se a condio computadores vendidos forem maiores que ou iguais a 50 verdadeira ou falsa. Se a condio for verdadeira ento impresso Recebeu bonificao! e o prximo comando em pseudocdigo na seqncia executado (lembre-se que pseudocdigo no uma linguagem de programao real). Se a condio for falsa, o comando de impresso ignorado e o prximo comando em pseudocdigo na seqncia executado. Note que a segunda linha desta estrutura de seleo endentada. Tal endentao opcional, mas altamente recomendada porque ela enfatiza a estrutura inerente dos programas estruturados. A converso do pseudocdigo acima em cdigo Perl fica da seguinte forma utilizando a estrutura if: if ( $vendas >= 50 ) { print Recebeu bonificao!\n; } S que o compilador Perl ignora caracteres de espaamento, como caracteres em branco, caracteres de tabulao e caracteres de nova linha, usados pra endentao e espaamento vertical. De modo que os caracteres de espaamento so usados exclusivamente para beneficio do programador. O corpo de todas as estruturas de controle em Perl deve ser colocado entre chaves ( { } ).

Este mesmo cdigo usando a estrutura unless fica da seguinte forma: unless ( $vendas >=50) { print Voc no recebeu sua bonificao.\n; } que escrevendo na forma de pseudocdigo fica A menos que computadores vendidos sejam maiores ou iguais a 50 Imprima Voc no recebeu sua bonificao. Note que as duas expresses querem dizer a mesma coisa mas esto escritas de forma diferente. A estrutura unless tem efeito oposto da estrutura if pois se sua condio for verdadeira ele no executa o comando de impresso, ignorando-o e se sua condio no for satisfeita que ele vai executar o comando de impresso. A estrutura de seleo if/else permite ao programador especificar que uma ao diferente deve ser executada quando a condio verdadeira e quando a condio falsa. Por exemplo. O comando de pseudocdigo Se computadores vendidos forem maiores que ou iguais a 50 Imprima Recebeu bonificao! Seno Imprima Voc no recebeu sua bonificao. Imprime Recebeu bonificao! se os computadores vendidos forem maiores que ou iguais a 50 e imprime Voc no recebeu sua bonificao se os computadores vendidos forem menores que 50. Em um caso ou outro, depois de ocorrer impresso, o prximo comando de pseudocdigo da seqncia executado. A estrutura se/seno em pseudocdigo pode ser escrita em Perl como if ( $vendas >= 50 ) { print Recebeu bonificao!\n; } else { print Voc no recebeu sua bonificao.\n; } Perl oferece o operador condicional ternrio (?:), que bastante semelhante estrutura if/else. O mesmo pseudocdigo escrito desta forma fica print ( $vendas >= 50 ? Recebeu bonificao\n : Voc no recebeu sua bonificao); Se a condio for verdadeira a primeira instruo (antes dos dois pontos) executada, se ela for falsa a segunda instruo (logo aps os dois pontos) executada. A estrutura if/elseif/else testa vrios casos. Por exemplo, o seguinte comando em pseudocdigo imprimir Bonificao de $1500! para vendas maiores ou iguais a 100, Bonificao de $600! Para vendas no intervalo de 70 a 99, Bonificao de $200! para

vendas no intervalo de 50 a 69 e Voc no recebeu sua bonificao. para vendas no intervalo de 0 a 49. Se computadores vendidos forem maiores que ou iguais a 100 Imprima Bonificao de $1500! Seno Se computadores vendidos forem maiores que ou iguais a 70 Imprima Bonificao de $600! Seno Se computadores vendidos forem maiores que ou iguais a 50 Imprima Bonificao de $200! Seno Imprima Voc no recebeu sua bonificao Este pseudocdigo pode ser escrito em Perl como if ( $vendas >= 100 ) { print Bonificao de \$1500!\n; } elseif ( $vendas >= 70 ) { print Bonificao de \$600!\n; } elseif ( $vendas >= 50 ) { print Bonificao de \$200!\n; } else { print Voc no recebeu sua bonificao.\n; } 7.2. Estruturas de Repetio Uma estrutura de repetio permite ao programador especificar que uma ao deve ser repetida enquanto alguma condio permanece verdadeira (ou permanece falsa). O comando de pseudocdigo Resposta 1 Enquanto resposta for menor ou igual a 1000 Dobre resposta A instruo dobre resposta executada enquanto a condio resposta for menos ou igual a 1000 for satisfeita, assim que a condio se tornar falsa a repetio termina e o primeiro comando de pseudocdigo aps a instruo de repetio executado. Observe que se deve tomar muito cuidado com esta estrutura pois pode ser que a condio sempre seja satisfeita executando dobre resposta indefinidamente, a isso se d o nome de loop infinito. O cdigo Perl referente ao pseudocdigo acima

$resposta = 1; while ( $resposta <=1000) { $resposta = 2 * $resposta; } A estrutura de repetio until funciona de maneira oposta da estrutura de repetio while. O corpo de until repetido enquanto a condio for falsa, a repetio cessa quando a condio verdadeira, o exemplo a seguir faz a mesma coisa que a estrutura while acima $resposta =1; until ( $resposta > 1000 ) { $resposta = 2 * $resposta; } O pseudocdigo desta expresso fica At que resposta seja maior que 1000 Dobre resposta As estruturas de repetio do/while e do /until so semelhantes s estruturas while e until. S que ao invs de testar a condio no inicio do lao como no while e until as estruturas do/while e do/until testam a condio de continuao do lao depois do corpo, apesar de parecer mesma coisa isso causa uma grande diferena, pois garante que os comando(s) sejam executados pelo menos uma vez antes de se analisar a condio. do { comando(s) }while (condio); do { comando(s) }until (condio); A estrutura for possui trs campos, o primeiro o ponto de partida, o segundo uma condicional e a terceira um campo normalmente usado para incremento, esta estrutura em Perl fica for ($resposta=1; $resposta <=1000; resposta*=2) { print Resposta : $resposta; } Enquanto a condio $resposta <=1000 for satisfeita o comando de impresso executado, ao encontrar a chave de fechamento o campo trs executado duplicando o valor de resposta, depois disso novamente se avalia a expresso condicional, seguindo

esses passos at que ela torne falsa, depois disso, a prxima instruo logo aps a estrutura de repetio executada.

Referncias
Deitel H. M., Deitel T. J. e Nieto T. R.(2002) Perl como programar, Apresentando CGI e Python, Porto Alegre, Bookman. Netuno. Disponvel em <http://users.netuno.com.br/aittner/meusprogramas.html> Acessado em Maio de 2005. Comprehensive Perl Archive Network (CPAN). Disponvel em <http://www.cpan.org> Acessado em Maio de 2005.

Você também pode gostar