Perl - O Canivete Suíço da Programação · 2019. 11. 6. · Perl - O Canivete Suíço da...

14
Perl - O Canivete Suíço da Programação 1 Glauber Cintra out/2011

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