Aprenda Perl

  • Página Inicial
  • Contato!
  • Tudo sobre Perl Parte 1!
  • Tudo sobre Perl Parte 2!
  • Tudo sobre Perl Parte 1

    Primeiro Script

    Um script Perl começa primeiramente com um shebang, que é formado pelos caracteres #!, e deve ser seguido do path onde o Perl está instalado.

    O comando de saída do Perl é o print, e um script Perl (com extensão .pl) seria assim:

    
    #!/usr/bin/perl
    
    print "Meu Primeiro Script Perl!\n";
    
    

    Para executar o Perl, vá na linha de comando e digite perl nomedoscript.pl (podendo até chamar diretamente o script, sem colocar perl antes). Em Linux pode ser necessário dar um chmod +x pra isso, em Windows não é necessário.

    PS: Para escrever comentários em Perl, coloque o # antes deles. Veja como usar comentários de uma e várias linhas:

    
    # Comentário de uma linha
    
    =begin
    Comentário
    de
    várias
    linhas! 
    =cut
    
    

    Variáveis

    Teoricamente falando, uma variável é um nome pelo qual um programador pode se referir a um espaço na memória do computador que deve armazenar um determinado valor. Esse valor pode ser numérico, um conjunto de caracteres (sempre entre aspas) ou um arquivo (valores booleanos são identificados como 0 e 1).

    No Perl, as variáveis começam com cifrão, igual no PHP (que tem influências do Perl), veja um exemplo simples de como elas são declaradas:

    
    #!/usr/bin/perl
    
    my $nome = "Exemplo de String!";
    
    print $nome;
    
    

    Com números:

    
    #!/usr/bin/perl
    
    my $num1 = 5;
    my $num2 = 10;
    
    my $res = $num1 + $num2;
    
    print "$res\n";
    
    

    Outro exemplo:

    
    #!/usr/bin/perl
    
    my $num1 = 7;
    my $num2 = 2;
    
    my $res = $num1 * $num2;
    
    print "$res\n";
    
    

    Veja um exemplo de uso de tipos primitivos:

    
    my $num = 50;
    my $real = 9.85;
    my $frase = "Isso é uma String";
    my $logico = true;
    
    

    As variáveis podem sofrer alterações nos valores dentro de um mesmo programa.

    Tal como o C, podemos também usar printf (print formatado), dessa forma:

    
    printf "Inteiro: %d\n", $num;
    printf "Real: %.2f\n", $real;
    printf "String: %s\n", $frase;
    printf "Lógico: %s\n", $logico;
    
    

    Constantes

    As variáveis são importantes quando temos que processar diversos dados diferentes mas não ao mesmo tempo. Dessa forma podemos economizar espaço na memória do computador em vez de criar uma variável para cada valor que deve ser processado.

    As constantes, por sua vez, são valores que, uma vez definidos, não podem ser alterados.

    As constantes são definidas com as palavras use constant e a atribuição (obrigatória) é feita com =>, dessa forma:

    
    #!/usr/bin/perl
    
    use constant PI => 4 * atan2(1, 1);
    use constant FRASE => "Exemplo de Constante!\n";
    
    print "O valor de PI é: ", PI, "\n";
    print FRASE;
    
    

    PS: Como visto acima, a concatenação de dados no Perl é feita por vírgulas, mas não é necessária em variáveis porque ela são diferenciadas pelo símbolo $ ou outros.

    Se tentarmos atribuir outro valor à constante, dará erro.

    Tipos de Dados

    No Perl existe três tipos básicos de dados, os escalares, os arrays e os hashes.

    Os escalares são especialmente elaborados para armazenar números, sejam eles inteiros, racionais, positivos ou negativos, etc., e textos, seja um simples caractere ou um texto longo.

    O Perl identifica o tipo escalar pelo prefixo $ que antecede o nome da variável. Pense no $ como o s de escalar.

    Veja abaixo um exemplo cujo resultado é um número real:

    
    #!/usr/bin/perl
    
    my $var1, $var2, $res;
    
    $var1 = 7;
    $var2 = 2;
    
    $res = $var1 / $var2;
    
    print $res;
    
    

    Como o Perl é dinamicamente tipado, não precisamos especificar o tipo de dados das variáveis.

    Para identificar o tipo de dados de uma variável, use o ref, assim:

    
    print ref \$res, "\n"; # Não esqueça da contrabarra.
    
    

    Operadores Aritméticos

    Os operadores aritméticos em Perl são os mesmos de outras linguagens, o que permite fazermos contas com ele, por exemplo:

    
    my $num1, $num2;
    
    $num1 = 10;
    $num2 = 5;
    
    printf "A soma de %d e %d é %d.\n", $num1, $num2, $num1 + $num2;
    printf "A subtração de %d e %d é %d.\n", $num1, $num2, $num1 - $num2;
    printf "A multiplicação de %d e %d é %d.\n", $num1, $num2, $num1 * $num2;
    printf "A divisão de %d e %d é %d ", $num1, $num2, $num1 / $num2;
    printf "com resto de %d.\n", $num1 % $num2;
    
    

    Os operadores lógicos (AND, OR e NOT) e os relacionais (menor, maior, igual, diferente, etc.) são os mesmos das outras linguagens.

    Pegar Dados do Teclado

    Para pegar dados do teclado, basta usarmos o my e as tags, dessa forma:

    
    print "Entre com seu nome: ";
    my $nome = <>;
    
    print "Seu nome é $nome\n";
    
    

    Podemos assim fazer, por exemplo, um programa que identifique se um número inteiro é par ou ímpar:

    
    print "Entre com um número: ";
    my $num = <>;
    
    print $num % 2 == 0 ? "Par" : "Ímpar";
    
    

    Condicionais IF e ELSE

    Basicamente o IF e ELSE é usado igual à qualquer outra linguagem, por exemplo:

    
    my $num = 20;
    
    if($num % 2 == 0) {
        print "É Par\n";
    }
    else {
        print "É Ímpar\n";
    }
    
    

    Mas o else if, diferente da maioria das linguagens, no Perl é chamado de elsif, por exemplo:

    
    print "Entre com sua idade: ";
    my $idade = <>;
    
    if($idade >= 18 && $idade < 70) {
        print "Voto Obrigatório!\n";
    }
    elsif(($idade >= 16 && $idade < 18) || $idade >= 70) {
        print "Voto Opcional!\n";
    }
    else {
        print "Não Vota!\n";
    }
    
    

    Laços de Repetição

    Basicamente, existem três tipos de laços no Perl.

    While, usado quando não sabemos quantas vezes precisará repetir um laço:

    
    my $num = 0;
    
    while($num < 10) {
        print "$num\n";
        $num++;
    }
    
    

    Do While, igual o While, só que ele garante pelo menos uma execução mesmo se a condição for falsa:

    
    my $num = 20;
    
    do {
        print "$num\n";
        $num++;
    }
    while($num < 10);
    
    

    Podemos usar o last (equivalente ao break) e o next (equivalente ao continue) para interromper e continuar (ao encontrar algum dado que não deve ser executado) uma estrutura while, respectivamente, mas esses códigos são pouco usados. Veja um exemplo:

    
    my $volta = 0;
    
    while(true) {
        $volta++;
    
        if($volta == 13 || $volta == 16) {
            next;
        }
        elsif($volta == 24) {
            last;
        }
    
        print "Volta Nº $volta.\n";
    }
    
    

    E o For, usado quando sabemos quantas vezes um laço se repetirá:

    
    for(my $i = 0; $i < 20; $i++) {
        print "$i\n";
    }
    
    

    Funções

    As funções em Perl são definidas com a palavra sub, e diferente de outras linguagens, não usa parênteses na criação, só na invocação, por exemplo:

    
    sub imprime {
        print "Frase Chamada pela Função\n";
    }
    
    imprime(); # Invocação da Função.
    
    

    No caso de passarmos parâmetros, definimos no começo da função com o $_[] e a posição do parâmetro, contada a partir do zero.

    Veja um exemplo disso com retorno de valores:

    
    sub soma {
        my $n1 = $_[0];
        my $n2 = $_[1];
        
        return $n1 + $n2;
    }
    
    print soma(10, 5);
    
    

    Arrays

    Os arrays também conhecidos como vetores, listas ou arranjos, armazenam um grupo de escalares organizados por índice numérico iniciado por zero. Os arrays são identificados pelo Perl através do prefixo @.

    Veja abaixo como se utiliza arrays em Perl:

    
    #!/usr/bin/perl
    
    my @numeros = (1, 2, 3, 4, 5);
    
    my @sonhos = ("casa", "carro", "apartamento");
    
    print "Os números são @numeros\n";
    print "Meus sonhos são @sonhos\n";
    
    

    Podemos pegar o índice específico de cada um deles (usando $):

    
    #!/usr/bin/perl
    
    my @numeros = (1, 2, 3, 4, 5);
    
    my @sonhos = ("casa", "carro", "apartamento");
    
    print "Os números são @numeros\n";
    print "Meus sonhos são @sonhos\n";
    
    print "$sonhos[2] vale $numeros[3]\n";
    print "Soma de $numeros[2] com $numeros[4] vale ", $numeros[2] + $numeros[4], "\n";
    
    

    Pra correr os dados do array com um for fazemos assim:

    
    my @numeros = (1, 2, 3, 4, 5);
    
    my @sonhos = ("casa", "carro", "apartamento");
    
    my $numeros_size = @numeros; # Isso pega a quantidade de elementos dum array
    
    for(my $i = 0; $i < $numeros_size; $i++) {
        printf "O número: é %d.\n", $numeros[$i];
    }
    
    my $sonhos_size = @sonhos;
    
    for(my $i = 0; $i < $sonhos_size; $i++) {
        printf "O sonho é: %s.\n", $sonhos[$i];
    }
    
    

    Podemos também usar o Foreach para correr todos os dados do Array, assim:

    
    my @numeros = (1, 2, 3, 4, 5);
    
    my @sonhos = ("casa", "carro", "apartamento");
    
    foreach $n(@numeros) {
       print "O número é: $n.\n";
    }
    
    foreach $s(@sonhos) {
       print "O sonho é: $s.\n";
    }
    
    

    Hashes

    Os hashes são um tipo bem especial de variável. Também conhecidos como dicionários ou tabelas, são similares aos arrays, porém seus índices são chaves e podem ser textos ou números. O prefixo de um hashe é o símbolo da porcentagem %.

    Para definir uma hashe colocamos o nome desejado (sem aspas), a atribuição com a seta e o valor desejado, assim:

    
    #!/usr/bin/perl
    
    my %tabela_hosts = (servidor => "192.168.0.11",
                     computador1 => "192.168.0.22",
                     computador2 => "192.168.0.24",
                     roteador => "192.168.0.1");
    			
    			
    print "$tabela_hosts{servidor}\n";
    print "$tabela_hosts{roteador}\n";
    
    

    Observe que pra exibir os dados num índice, usamos chaves ao invés de colchetes.

    Podemos também usar o Foreach para correr todos os dados do hashe, assim:

    
    my %tabela_hosts = (servidor => "192.168.0.11",
                     computador1 => "192.168.0.22",
                     computador2 => "192.168.0.24",
                     roteador => "192.168.0.1");
    				 
    foreach $t(keys %tabela_hosts) {
       print "O $t tem o valor ", $tabela_hosts{$t}, "\n";
    }