Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Licença GNU de Documentação Livre, Versão 1.1, Notas de estudo de Gestão de Recursos Humanos

Os termos da licença gnu de documentação livre, versão 1.1, publicada pela fundação software livre. Essa licença permite a distribuição e modificação de documentos, mantendo os mesmos termos de liberdade que o software livre. Os termos abrangem as seções invariantes, as versões modificadas, as seções secundárias e as cópias transparentes.

Tipologia: Notas de estudo

2015

Compartilhado em 09/05/2015

daysi-bishop-12
daysi-bishop-12 🇧🇷

5

(2)

38 documentos

1 / 30

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Comitê de Incentivo a Produção do Software Gratuito e Alternativo – CIPSGA
CURSO DE
PERL/Básico
Autor: Ricardo Filipo
Junho de 2000
Curso de PERL − www.cipsga.org.br − [email protected] − Página 1
Erro de leitura
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e

Pré-visualização parcial do texto

Baixe Licença GNU de Documentação Livre, Versão 1.1 e outras Notas de estudo em PDF para Gestão de Recursos Humanos, somente na Docsity!

CURSO DE

PERL/Básico

Autor: Ricardo Filipo

[email protected]

Junho de 2000

Erro de leitura

Curso de PERL

Comite de Incentivo a Produção

do Software Gratuito e Alternativo

CIPSGA

Autor:

Ricardo Filipo

[email protected]

[email protected]

Junho de 2000

Arte Final: Djalma Valois Filho [email protected]

Copyright (c) 2000, Ricardo Filipo. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Sections being LIST THEIR TITLES, with the Front−Cover Texts being LIST, and with the Back− Cover Texts being LIST. A copy of the license is included in the section entitled "GNU Free Documentation License".

Copyright (c) 2000, Ricardo Filipo E garantida a permissão para copiar, distribuir e/ou modificar este documento sob os termos da GNU Free Documentation License, versão 1.1 ou qualquer outra versão posterior publicada pela Free Software Foundation; sem obrigatoriedade de Seções Invariantes na abertura e ao final dos textos. Uma copia da licença deve ser incluída na seção intitulada GNU Free Documentation License.

Para os apressados

Com o desenvolvimento das facilidades de programação para a Internet, como PHP, ASP e outras coisas, várias pessoas tem me perguntado: Para que serve o Perl, afinal? Tenho escutado comentários sobre a obsolescencia da linguagem frente a estas outras, muito mais modernas (será mesmo?).

Talvez seja verdade que para algumas aplicações não seja preciso usar o Perl. Mas sem dúvida todas as coisas que se faz com outras linguagens poderiam ser feitas usando Perl, talvez com mais poder, versatilidade e facilidade. No lado do servidor, códigos incrustrados no documento em HTML, tipo PHP ou ASP podem ser implementados com o módulo do Apache mod_perl. No lado do cliente, com funções muito parecidas com o javascript o vbscript há o perlscript, um plugin para navegadores como Netscape e Explorer. E como o Perl é uma linguagem de uso geral, aplicações para desktop, softwares de produtividade, gerenciadores de bancos de dados, interfaces gráficas, programção de sockets, clientes e servidores para Internet, CGI, etc. podem ser desenvolvidos rapidamente..

Nesta apostila procuramos apresentar o Perl de uma forma bem abrangente, permitindo uma primeira experiência com o ambiente em suas principais e mais comuns aplicações.

Para um aprofundamento dos conceitos aqui apresentados podem ser usados os comandos

/> man perl

Deve ser lido ainda: /> man perlfaq

Para ler a documentação de um módulo: /> perldoc nome−do−modulo

Usos do Perl

Internet Administração de servidores Software em geral Bancos de Dados

Perl (Practical Extraction and Report Language) é um ambiente de programação de uso geral, de alto nível e fácil aprendizagem, implementável nas principais plataformas (quase todas as distribuições de UNIX trazem o Perl como padrão do sistema. As versões para Windows e Mac também são perfeitas, aproveitando as características destas plataformas). Possui recursos poderosos para processamento de strings, interação com o sistema operacional e com a rede, além de facilidades como gerenciamento automático de memória e casting inteligente e automático de tipos.

Apesar de se apresentar como uma linguagem de scripts, seus executáveis funcionam compilados em tempo real, sendo rápidos e poderosos. Esta característica 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 compilação de executáveis. Outra grande vantagem é o Perl possuir, embutido no compilador, um depurador de excelente funcionamento.

Estes motivos tornaram o Perl a linguagem preferida para a programação de aplicações que rodam em servidores da Internet. Os administradores de sistemas UNIX, em especial, precisam dominar o ambiente, já que muitos utilitários do sistemas são baseados em Perl ou o usam ostensivamente.

Mas a característica mais importante do Perl é sua condição de "Software Livre". Os códigos, por definição, sendo uma linguagem de scripts, ficam "abertos". Desenvolvido inicialmente para implementar um ambiente de catalogação de erros, os códigos do primeiro Perl foram disponibilizados na Internet por seu criador, Larry Wall. Uma multidão de programadores (os Perl Porters) passaram a incorporar melhorias à linguagem, tornando−a completa.

Se desejar ler o arquivo README sobre algum modulo que contenha o texto "xml", digite:

cpan> readme /xml/

make, test, install, clean, módulos ou distribuições

Estes comandos levam qualquer número de argumentos e investigam o que é necessário para executar a ação. Se o argumento é o nome de um arquivo de distribuição, este é processado. Se é um módulo, CPAN determina o arquivo de distribuição no qual este módulo é incluído e o processa. Se existirem dependências, estas são resolvidas.

Exemplo:

cpan> install OpenGL OpenGL is up to date. cpan> force install OpenGL Running make OpenGL−0.4/ OpenGL−0.4/COPYRIGHT [...]

Como executar os scripts Perl

UNIX

Para rodar o script "oi_turma", que está no diretório atual digite no shell:

> perl ./oi_turma

É possível fazer do script Perl um executável. Basta seguir os passos:

1 − Acrescentar o comando abaixo na primeira linha do script:

#!/usr/bin/perl

Substitua o caminho por outro que indique a localização do executável Perl em sua plataforma, ou crie um alias para o mesmo para o caminho indicado no comando acima.

2 − Mude a permissão do script para que possa ser executado pelo usuário corrente:

> chmod +x ./oi_turma

Opções na linha de comando

Os argumentos passados pela linha de comando que contem só uma letra podem ser agrupados

Exemplo:

#! /usr/bin/perl −spi.bak

é igual a:

#! /usr/bin/perl −s −p −i.bak

As opções mais comuns são:

−d carrega o depurador Perl −w o Perl imprimirá em STDERR todos os avisos (sintaxe, variáveis não inicializadas, etc). −e executa o proximo argumento (entre aspas).

Um uso muito útil para o perl seria trocar todas as ocorrências de um texto por outro, em determinados arquivos, salvando um backup destes.

/> perl −p −i.bak −e "s/texto antigo/novo texto/g" *.html

Isto pode ser uma solução fantástica se você precisar consertar um link quebrado, presente em centenas de arquivos.

Fundamentos da linguagem

O Perl é um ambiente de programação muito poderoso, mas a linguagem é de fácil aprendizagem. Apresenta características muito parecidas com C, sed, awk, basic e shell do UNIX.

Suas melhores características estão relacionadas ao tratamento automático da memória, conversão automática de tipos e à grande facilidade no processamento de texto.

Entretanto quem não tem experiência em UNIX ou sed, awk e shell poderá encontrar alguma dificuldade com a assimilação de alguns poderosos recursos.

Notação

O Perl possui um esquema de notação que se aproxima muito do usado em "C", possuindo ainda diversas características do Basic, awk e sed. A estrutura de inicialização do programa assume algo muito próximo do Pascal. Com o uso dos módulos, entretanto, o Perl pode assumir a feição de outras linguagens, como Tk ou Lisp.

Como em C, no Perl os comandos precisam ser terminados com um ";" (ponto e vírgula).

Comentários precisam ser precedidos por "#" (sustenido). Exemplo:

O comando abaixo imprime uma saudação

print "Oi, turma!/n";

Strings

Sequências de caracteres. Em sua forma literal devem ser delimitadas por aspas simples (’) ou duplas ("). Strings delimitadas por aspas duplas podem conter variáveis interpoladas ou caracteres especiais, usando a barra de escape.

Exemplo:

$variavel= "Cyber"; $aspas_simples = ’Interatividade?\nChame o $variavel.’; $aspas_duplas = "Interatividade?\nChame o $variavel."; print $aspas_simples; print "\n−−−−−−−−−−−−−−−\n"; print $aspas_duplas, "\n";

Isto imprimirá na tela:

Interatividade?\nChame o $variavel. −−−−−−−−−−−−−−−− Interatividade? Chame o Cyber

Repare que o último comando "print" usa uma vírgula para separar os seus dois argumentos: o escalar $aspas_duplas e o string literal "\n". Se for preciso, entretanto, colocar uma aspa simples numa string delimitada por aspas simples, será necessário usar um escape antes desta (\’).

Referências

O equivalente aos ponteiros. Podem ser referenciados escalares, arrays, hashs, funções, classes, objetos, etc. Mais à frente nesta apostila este assunto será tratado om mais profundidade.

Arrays

Precedidos por um arroba (@). Exemplo: @Array

Armazena listas de escalares. Cada elemento da lista pode ser lido usando−se o seu índice numérico entre colchetes. O índice do primeiro elemento é 0.

Listas

São coleções de escalares. Listas de literais ou variáveis podem ser construídas com os elementos separados por vírgulas e envolvidos por parênteses. Listas podem ser atribuídas a arrays ou a listas de variáveis. Exemplo:

@Array = (’texto’,$foo,8,"var interpolada: $foo");

Uma lista de literais pode ser atribuida a uma lista de variáveis:

($ouro, $prata, $bronze) = ("dourado", "prateado", "bronzeado");

Podemos atribuir um array a uma lista de variáveis escalares:

@Agora = gmtime; ($dia,$mes,$ano..) =@Agora;

Acessando os elementos do array usando o indice numérico:

print $Agora(0);

Acessando os elementos do array usando o comando "foreach":

foreach $elemento (@Agora){ print $elemento; }

Atribuindo−se um array a uma variável escalar, estaremos passando o tamanho do array, um inteiro.

$tamanho =@Agora; print $tamanho;

Isto imprimirá na tela:

3

Hashs

São coleções de escalares referenciados por uma chave definida como outro escalar (string). São precedidos pelo sinal de percentagem (%).

Exemplo: %Hash

Podemos acessar e modificar cada par chave e valor usando as palavras reservadas key e value ou as outras notações alternativas.

keys %Hash=(fruta,massa,liquido); values %Hash=("pera", "lazanha", "vinho");

O comando abaixo produziria o mesmo efeito:

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

Ou ainda:

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

Para acessar os dados de um hash precisamos usar a palavra−chave entre chaves ("{" e "}")

Exemplo:

print $Hash{"fruta");

print("$foo é menor que 10\n"); $foo++; } else { print "Ops! $foo é igual a 10!!!\n"; }

while

Exemplo:

$foo=0; while ( $foo < 10 ) { print("$foo é menor que 10\n"); $foo++; { print "Ops! $foo é igual a 10!!!\n";

for

Exemplo:

for ( $foo=0;$foo < 10 ;$foo++;) { print("$foo é menor que 10\n"); } print "Ops! $foo é igual a 10!!!\n";

foreach

Exemplo:

@foo=(0,1,2,3,4,5,6,7,8,9); foreach $foo(@foo) { print("$foo é menor que 10\n"); } $foo=10; print "Ops! $foo é igual a 10!!!\n";

goto label

Exemplo:

print "Isto será impresso\n"; goto Fim; print "Isto nunca será impresso";

:Fim print "Isto também será impresso\n";

Variáveis especiais

O perl usa uma série de variáveis especiais que facilitam e otimizam o código. As mais importante são $_ e @_ que sempre se referem ao ultimo valor processado.

Exemplo:

$foo="Olha, cara!"; print;

Imprimira o valor de $foo.

Arquivos − leitura e escrita

Handle de arquivo é um container que guarda o arquivo, geralmente em forma de array

Exemplo: abrindo um arquivo para escrita:

open FILE, ">arquivo.txt";

Exemplo: abrindo um arquivo para leitura e atribuindo seu conteúdo a um array:

open FILE, "arquivo.txt"; @file=;

O sinal refere−se ao conteúdo do arquivo cujo handle é FOO. Se for usado <> será acessado o conteúdo de STDIN.

O algoritmo abaixo le as entradas do console, até encontrar um final de arquivo (control D) acumulando no string foo:

while (<>) { $foo .=$_; }

Para assuntos mais aprofundados sobre abertura e fechamento de arquivos, é bom ler o tutorial sobre arquivos, usando o man, do GNU/Linux.

/> man perlopentut

Subrotinas

Um bloco de comandos nomeado com o comando "sub" define uma subrotina ou função. Para executar a subrotina basta preceder seu nome pelo "&";

Exemplo:

Usando o Perl na Internet

Devido às suas características que facilitam o processamento de strings, à versatilidade e simplicidade da linguagem, a facilidade de manutenção do programa e sua velocidade de execução, o Perl tornou−se o ambiente preferido para o desenvolvimento de scripts para a CGI. Em 1996 Steven E. Brenner criou a biblioteca cgi−lib.pl, que tornou−se uma espécie de padrão no Perl 4. Atualmente, o Perl 5 oferece uma série de módulos que facilitam muito o processamento de html, forms, email, ftp, newsgrowps, XML WML entre outros.

Cabeçalho do HTTP 1.

Quando um arquivo é enviado para um cliente Internet (como o Netscape, por exemplo) pelo servidor, este deve conter um cabeçalho na forma mínima:

Content−type: text/plain

Seguido de 2 caracteres de nova linha. Isto indica o typo MIME do documento, orientando o navegador de como este deve processado.

Um exemplo usando o cabeçalho completo seria:

HTTP/1.0 200 OK Date: Thursday, 28−June−96 11:12:21 GMT Server: NCSA/1.4. Content−type: text/html Content−length: 2041

Variáveis de ambiente

A CGI usa as variáveis de ambiente na transação de pedido e envio de arquivos para controlar e processar algoritmos.

Temos acesso a dados do cliente que fez o pedido e a detalhes deste pedido, pode−se lidar com os protocolos de autorização, "Mime Types", cookies. Não pretendemos aqui neste trabalho aprofundar o estudo da CGI, apenas pretendemos exemplificar o uso do Perl.

Para Ter acesso às varáveis do CGI, use o hash %ENV:

#!/usr/bin/perl

print "Content−type: text/plain\n\n"; foreach $var (keys %ENV) { print "

$var: $ENV{$var}\n"; }

Este programa gerou na tela no meu navegador da Internet:

SERVER_SOFTWARE: Apache/1.2. GATEWAY_INTERFACE: CGI/1. DOCUMENT_ROOT: /home/httpd/html/gallerie/html/

#### REMOTE_ADDR: 172.16.1.

SERVER_PROTOCOL: HTTP/1.

REQUEST_METHOD: GET

REMOTE_HOST: guitar.escritorio.casa QUERY_STRING: HTTP_USER_AGENT: Mozilla/4.0 (LINUX) PATH: /bin:/sbin:/usr/bin:/usr/sbin HTTP_ACCEPT: / HTTP_CONNECTION: Keep−Alive REMOTE_PORT: 2057 HTTP_ACCEPT_LANGUAGE: pt−br SCRIPT_NAME: /cgi−bin/getenv HTTP_ACCEPT_ENCODING: gzip, deflate SCRIPT_FILENAME: /home/httpd/html/gallerie/cgi−bin/getenv SERVER_NAME: gallerie.escritorio.casa REQUEST_URI: /cgi−bin/getenv SERVER_PORT: 80 HTTP_HOST: gallerie.escritorio.casa SERVER_ADMIN: [email protected]

**Lendo um **

Podemos chamar um script Perl de dentro de uma página HTML que contém um . O meu Apache está configurado para rodar scripts no diretório /cgi−bin/ que aponta para o diretório real, na máquina: /home/httpd/cgi−bin/

O Formulário teria a forma:

**

**

O script abaixo deve ser salvo no diretório /home/httpd/cgi−bin/ e deve Ter permissão para executar: /> chmod 744 ./getenv

Note que foi usada a biblioteca cgi−lib.pl e sua rotina &ReadParse, que coloca a string "Query" (aqui escondida pelo método post) no array @in:

**#!/usr/bin/perl

getenv

require "cgi−lib.pl"; &ReadParse;**

print "Content−type: text/plain\n\n"; print "Variaveis:\n"; foreach $vari(@in){ print "$vari\n";

}

foreach $var (keys %ENV) { print "

$var: $ENV{$var}\n"; } print $tela−>end_html;

o arquivo de retorno em meu navegador foi:

_ Variaveis de Ambiente

Variaveis:

SERVER_SOFTWARE: Apache/1.2.

GATEWAY_INTERFACE: CGI/1.

DOCUMENT_ROOT: /home/httpd/html/gallerie/html/

REMOTE_ADDR: 172.16.1.

SERVER_PROTOCOL: HTTP/1.

REQUEST_METHOD: POST

REMOTE_HOST: guitar.escritorio.casa

QUERY_STRING:

HTTP_USER_AGENT: Mozilla/4.0 (LINUX)

PATH: /bin:/sbin:/usr/bin:/usr/sbin

HTTP_ACCEPT: */*

HTTP_CONNECTION: Keep−Alive

REMOTE_PORT: 2063

HTTP_ACCEPT_LANGUAGE: pt−br

SCRIPT_NAME: /cgi−bin/getenv

HTTP_ACCEPT_ENCODING: gzip, deflate

SCRIPT_FILENAME: /home/httpd/html/gallerie/cgi−bin/getenv

SERVER_NAME: gallerie.escritorio.casa

REQUEST_URI: /cgi−bin/getenv

SERVER_PORT: 80

CONTENT_LENGTH: 49

CONTENT_TYPE: application/x−www−form−urlencoded

HTTP_HOST: gallerie.escritorio.casa

SERVER_ADMIN: [email protected]

_

O módulo CGI facilita muito a formatação da página, leitura e processamento de cookies, escrita de tabelas, forms, etc.

Administrando bancos de dados

Módulo DB_File

O módulo DB_File e a distribuição Berkeley DB em geral está presente nos sistemas GNU/Linux, mas pode ser obtida em http://www. sleepycat.com/

Podemos ligar um arquivo com dados do tipo nome:valor a um arquivo Hash. Bancos de dados simples podem ser desenvolvidos desta forma.

Devemos usar o comando "tie" para fazer a ligação. Exemplo:

**#!/usr/bin/perl

telefones**

**use DB_File; $caderno= tie %TEL, "DB_File", "/home/ricardo/telefones.txt"; while (TRUE){ # criando um loop: # Menu system("clear"); print "−−−−−−−−−−−−−− Agenda de Telefones −−−−−−−−−−−−−−−−\n"; $lido=&Digitado("Entre com o comando: [A] Incluir [M] Mostrar Lista [S] Sair:", c); if ($lido eq "A"){&Incluir;} elsif ($lido eq "M"){&Mostrar;} elsif ($lido eq "S"){&Sair;} } # fechando o loop**

sub Digitado { my $xx, $tx; $tx=""; print $_[0], "\n"; while ($lendo ne 1){$xx=getc; if ($xx eq "\n"){$lendo=1;}else{$tx.=$xx;} } $lendo=0; print "−−−−−−−−−−−−−−−−−−−−−−−−−−> Foi lido: $tx\n"; return $tx;}

sub Incluir { $nome=&Digitado ("Nome a incluir: "); $tel=&Digitado("Telefone: "); $caderno−>put($nome, $tel);} sub Mostrar { foreach $nome(keys %TEL){ print "Nome: $nome\n"; print "Telefone: $TEL{$nome}\n−−−−−−−−−−−−\n";} &Digitado("Tecle enter para continuar"); } sub Sair {exit(0);}

Para maiores detalhes sobre o módulo, digite:

/> perldoc DB_File

Bancos de dados mais complexos devem usar o módulo DBI, que servirá de interface com servidores SQL, como mSQL, MySQL, Oracle, postgres, etc.

Interface gráfica

Módulo perlTk

Pré−requisito: Tk 4.0 ou superior instalado. O Nosso objetivo aqui é apenas apresentar o Perl/Tk. Estudos mais aprofundados dos comandos do Tk podem ser feitos digitando:

/> perldoc Tk

O Perl/Tk é usado para criar uma interface gráfica para os programas em Perl. Com este módulo torna−se muito fácil a criação de janelas, botões, scrolls, canvas, caixas de texto, etc.