Perl - O Canivete Suíço da Programação · 2019. 11. 6. · Perl - O Canivete Suíço da...
Transcript of Perl - O Canivete Suíço da Programação · 2019. 11. 6. · Perl - O Canivete Suíço da...
-
Perl - O Canivete Suíço da Programação
1
Glauber Cintra – out/2011
-
2
Perl (Practical Extraction and Report Language)
Criada por Larry Wall em 1987
Regra 1: Larry por definição está sempre certo
sobre como o Perl deve se comportar. Isto significa
que ele tem o poder final do veto na funcionalidade
do todo.
Regra 2: É permitido a Larry mudar de ideia mais
tarde sobre qualquer assunto, não importa se ele
invocou previamente a regra 1.
Influenciada pelas linguagens C e AWK
Influenciou Ruby, Python e PHP
Utilizada para aplicações web, bioinformática,
scripts, etc (9º lugar no índice TIOBE)
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
-
3
Características da Linguagem Perl
Linguagem de programação de uso geral
Fácil manipulação de textos e processos
Não tipada
Interpretada
Alta portabilidade
Favorece a reusabilidade de código
Suporta orientação a objetos
Alta produtividade
Código lento
Baixa legibilidade
Existem versões gratuitas do Perl para Unix, Windows, MacOS, etc.
Página oficial: www.perl.org
-
4
Regras Sintáticas Básicas
Case-sensitive
Sentenças devem terminar com ;
Os blocos têm que estar dentro de { }
O conteúdo de uma linha após um # é entendido como comentário
Toda sentença é também uma expressão!
-
5
Literais
Numéricos: 12, -5, 1_234, 3.1415, 5E-10, 0xff, 0377
Strings: 'abc', q/abc/, qq/abc/, "abc"
(usando as duas últimas formas, qq/.../ ou "...", é feita interpolação)
Obs: qx/comando/ ou `comando` representa a string devolvida pela
execução do comando
Vetores: (1, "casa", 8), ( ) , (1..4), ('az'..'bc'), qw/casa bola dado/
Hashes: (nome => Luís, sexo => M), (nome , Luís, sexo , M)
-
6
Variáveis
Variáveis são criadas dinamicamente e inicializadas com nulo
Variáveis escalares: seu identificador deve ser precedido por $
Vetores (listas): contêm uma lista de valores heterogêneos. Seu
identificador deve ser precedido de @.
Exemplos: @notas, $nomes[0], $notas, $notas[-1], $#notas,
@nomes[2, 4, 1], @notas[3..8], $notas[3][5]
Hashes (vetores associativos): contêm uma lista de valores
heterogêneos com uma chave associada a cada valor. Seu
identificador deve ser precedido de %.
Exemplos: %notas, $nomes{32}, $notas{rui}, @notas{rui, ana},
$notas
-
7
Operadores
Aritméticos: +, -, *, /, %, **
Lógicos: &&, ||, !, &, |, ~, ^, and, or, not, xor
String: . (concatenação), =~ (busca, substituição e translação), !~
(busca, substituição e translação negada)
Relacionais: ==, >, =, > (shift right), (derreferência), ?: (if-then-else abreviado)
Atribuição: =, ++, --, +=, -=, *=, /=, %=, **=, &&=, ||=, &=, |=, ^=, .=, x=,
>>=,
-
8
Estruturas de controle
Desvios condicionais:
if (CONDIÇÃO) { BLOCO } [[ elseif (CONDIÇÃO) { BLOCO } ] else {
BLOCO } ]
unless (CONDIÇÃO) { BLOCO } [ else { BLOCO } ]
Desvios incondicionais:
return [EXPRESSÃO] - sai da subrotina devolvendo o valor da
EXPRESSÃO
goto RÓTULO - desvia para a sentença indicada
last [RÓTULO] - desvia para a primeira sentença após o laço
next [RÓTULO] - inicia uma nova iteração do laço
redo [RÓTULO] - reinicia a iteração corrente do laço
-
9
Laços condicionais:
while (CONDIÇÃO) { BLOCO }
do { BLOCO } while (CONDIÇÃO);
until (CONDIÇÃO) { BLOCO }
do { BLOCO } until (CONDIÇÃO);
Laços contados:
for (INICIALIZAÇÃO; CONDIÇÃO; INCREMENTO) { BLOCO }
foreach [VARIÁVEL] (LISTA) { BLOCO }
Formas alternativas:
EXPRESSÃO if CONDIÇÃO;
EXPRESSÃO unless CONDIÇÃO;
EXPRESSÃO while CONDIÇÃO;
EXPRESSÃO until CONDIÇÃO;
-
10
Subrotinas
Os parâmetros podem ou não ser colocados entre parênteses
Os parâmetros são passados sempre por referência e são colocados
no vetor @_
Os parâmetros passados através da linha de comando para o
programa principal são colocados no vetor @ARGV
Declaração de subrotinas
sub NOME_SUBROTINA { BLOCO }
Os parâmetros formais não são declarados
A subrotina devolve o valor da última expressão avaliada
Exemplo: sub soma{ foreach (@_){ $s += $_; } }
-
11
Funções Pré-definidas
Aritméticas
Conversão
Manipulação de strings
Manipulação de vetores e hashes
Entrada e saída
Manipulação de arquivos de diretórios
Interação com o sistema operacional
-
12
HELLO WORLD
#!/usr/local/bin/perl
print "Hello world!\n";
FATORIAL
#!/usr/local/bin/perl
sub fat{ $_[0] > 0 ? $_[0] * fat($_[0] – 1) : 1; }
print "O fatorial de $ARGV[0] é " . fat($ARGV[0]) . "\n";
-
13
Mais um Exemplo #!/usr/local/bin/perl
use lib "/usr/local/share/perl/5.6.1";
use LWP::Simple;
use LWP::UserAgent;
use URI::URL;
use HTTP::Request::Common;
$ua = LWP::UserAgent->new(agent => "Mozilla/4.0 (compatible; MSIE 6.0)");
$request = POST("http://www.ime.usp.br/~glauber/cgi-bin/printenv",
[id_enquete => "56770", opcao => "2", enviar.x => 11, enviar.y => 6 ]);
$request->header(referer , "saida");
$response = $ua->request($request, $callback);
print "
Results are ", $response->content;
while (1){
$c = get ("http://cgi2.uol.com.br/cgi-bin/urnavirt/urna2.cgi?voto=2");
sleep 10;
$j++;
open ARQ, ">cont";
print ARQ "$j\n";
close ARQ;
}
-
14
Conclusão
Linguagem poderosa
Altamente concisa
Vasta documentação
Enorme quantidade de bibliotecas (http://www.cpan.org)
Usada por Amazon, BBC, Slashdot, TicketMaster, etc
Não é para leigos!
FIM