Learn in 10 minutes

Learn in 10 minutes

Aprenda Perl em 10 minutos

Perl é uma linguagem de programação poderosa e de alto nível conhecida por suas capacidades de processamento de texto e flexibilidade. Originalmente desenvolvida para tarefas de administração de sistemas, Perl evoluiu para uma linguagem versátil usada para desenvolvimento web, programação de rede e muito mais. Este tutorial aborda os conceitos principais do Perl para ajudá-lo a aprender a linguagem rapidamente.

1. Escrevendo seu primeiro programa em Perl

Vamos começar com um programa simples. Crie um arquivo chamado hello.pl e digite o seguinte código:

#!/usr/bin/perl
print "Hello, World!\n";

Salve o arquivo e execute o seguinte comando no terminal:

perl hello.pl

A saída será:

Hello, World!

Este programa simples demonstra a funcionalidade básica de saída do Perl. A função print é usada para exibir informações de texto no console.

2. Sintaxe básica

A sintaxe do Perl é flexível e expressiva, com várias características distintas.

# Este é um comentário
print "Hello, World!\n";

Regras básicas de sintaxe em Perl:

  • Comentários: Comentários de linha única começam com #
  • Declarações: Terminam com ponto e vírgula ;
  • Linha Shebang: #!/usr/bin/perl no topo dos arquivos de script
  • Variáveis: Usam caracteres especiais para denotar tipos de variáveis ($, @, %)
  • Aspas de string: Podem usar aspas simples ' ou aspas duplas "

3. Variáveis e tipos de dados

No Perl, as variáveis são tipadas dinamicamente e usam caracteres especiais para denotar seu tipo.

Variáveis escalares (valores únicos):

$nome = "Alice";
$idade = 25;
$temperatura = 36.5;
$esta_ativo = 1;  # 1 para verdadeiro, string vazia para falso

Variáveis de array (listas ordenadas):

@frutas = ("maçã", "banana", "cereja");
@numeros = (1, 2, 3, 4, 5);

Variáveis de hash (pares chave-valor):

%pessoa = (
    "nome" => "John",
    "idade" => 30,
    "cidade" => "Nova York"
);

3.1 Variáveis escalares

Escalares armazenam valores únicos como strings, números ou referências.

# Operações com strings
$texto = "Programação Perl";
print length($texto);        # Comprimento da string
print uc($texto);            # Converter para maiúsculas
print lc($texto);            # Converter para minúsculas
print substr($texto, 0, 4);  # Extrair substring

# Operações numéricas
$x = 10;
$y = 3;
print $x + $y;    # 13
print $x - $y;    # 7
print $x * $y;    # 30
print $x / $y;    # 3.333...
print $x % $y;    # 1 (módulo)

3.2 Variáveis de array

Arrays são coleções ordenadas que podem armazenar múltiplos valores.

@cores = ("vermelho", "verde", "azul");

# Acessando elementos do array
print $cores[0];     # "vermelho" (use $ para elemento único)
print $cores[1];     # "verde"
print $cores[-1];    # "azul" (último elemento)

# Operações com arrays
push(@cores, "amarelo");     # Adicionar ao final
pop(@cores);                 # Remover do final
shift(@cores);               # Remover do início
unshift(@cores, "roxo");     # Adicionar ao início

# Funções de array
print scalar(@cores);       # Número de elementos
print $#cores;              # Último índice

3.3 Variáveis de hash

Hashes são coleções de pares chave-valor.

%estudante = (
    nome => "Alice",
    idade => 20,
    curso => "Ciência da Computação"
);

# Acessando elementos do hash
print $estudante{"nome"};     # "Alice"
print $estudante{idade};       # 20

# Operações com hash
$estudante{"nota"} = 3.8;     # Adicionar novo par chave-valor
delete $estudante{"idade"};   # Remover par chave-valor

# Funções de hash
@chaves = keys %estudante;      # Obter todas as chaves
@valores = values %estudante;   # Obter todos os valores

4. Controle de fluxo

Perl fornece várias declarações de controle de fluxo para gerenciar a execução do programa.

4.1 Declarações if

A declaração if avalia uma condição e executa seu bloco se a condição for verdadeira.

$idade = 20;
if ($idade >= 18) {
    print "Adulto\n";
} elsif ($idade >= 13) {
    print "Adolescente\n";
} else {
    print "Criança\n";
}

# if em uma linha
print "Adulto\n" if $idade >= 18;

4.2 Declarações unless

unless é o oposto de if - executa quando a condição é falsa.

$idade = 15;
unless ($idade >= 18) {
    print "Não é adulto\n";
}

# unless em uma linha
print "Não é adulto\n" unless $idade >= 18;

4.3 Loops

Perl suporta vários construtores de loop.

Loop while:

$contador = 0;
while ($contador < 5) {
    print "Contador: $contador\n";
    $contador++;
}

Loop for:

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

Loop foreach:

@frutas = ("maçã", "banana", "cereja");
foreach $fruta (@frutas) {
    print "Fruta: $fruta\n";
}

# Usando a variável padrão $_
foreach (@frutas) {
    print "Fruta: $_\n";
}

last e next:

foreach (1..10) {
    last if $_ == 5;     # Sair do loop
    next if $_ % 2 == 0; # Pular números pares
    print "$_\n";        # Saída: 1, 3
}

5. Sub-rotinas

Sub-rotinas em Perl são definidas usando a palavra-chave sub.

Definição básica de sub-rotina:

sub cumprimentar {
    my $nome = shift;
    return "Olá, $nome!";
}

# Chamando a sub-rotina
$mensagem = cumprimentar("John");
print $mensagem;

Usando parâmetros:

sub somar_numeros {
    my ($a, $b) = @_;
    return $a + $b;
}

$resultado = somar_numeros(5, 3);
print "Soma: $resultado\n";

Parâmetros padrão:

sub cumprimentar {
    my ($nome, $cumprimento) = @_;
    $cumprimento = "Olá" unless defined $cumprimento;
    return "$cumprimento, $nome!";
}

print cumprimentar("Alice");          # "Olá, Alice!"
print cumprimentar("Bob", "Oi");      # "Oi, Bob!"

6. Expressões regulares

Perl é famoso por suas poderosas capacidades de expressões regulares.

Correspondência de padrões básica:

$texto = "Hello, World!";

if ($texto =~ /Hello/) {
    print "Encontrado 'Hello'\n";
}

# Correspondência sem distinção entre maiúsculas e minúsculas
if ($texto =~ /world/i) {
    print "Encontrado 'world' (sem distinção de caso)\n";
}

Substituição:

$texto = "Eu gosto de gatos e gatos são fofos";
$texto =~ s/gatos/cachorros/g;  # Substituir todas as ocorrências
print "$texto\n";              # "Eu gosto de cachorros e cachorros são fofos"

Extraindo correspondências:

$email = "[email protected]";
if ($email =~ /(\w+)@(\w+\.\w+)/) {
    print "Nome de usuário: $1\n";      # "usuario"
    print "Domínio: $2\n";              # "exemplo.com"
}

7. Operações com arquivos

Perl fornece métodos simples para leitura e escrita de arquivos.

Lendo arquivos:

# Ler arquivo inteiro
open(my $fh, '<', 'exemplo.txt') or die "Não é possível abrir o arquivo: $!";
my $conteudo = do { local $/; <$fh> };
close($fh);
print $conteudo;

# Ler linha por linha
open(my $fh, '<', 'exemplo.txt') or die "Não é possível abrir o arquivo: $!";
while (my $linha = <$fh>) {
    print $linha;
}
close($fh);

Escrevendo arquivos:

# Escrever no arquivo
open(my $fh, '>', 'saida.txt') or die "Não é possível abrir o arquivo: $!";
print $fh "Olá, Perl!\n";
close($fh);

# Anexar ao arquivo
open(my $fh, '>>', 'saida.txt') or die "Não é possível abrir o arquivo: $!";
print $fh "Anexando novo conteúdo.\n";
close($fh);

8. Funções embutidas

Perl vem com muitas funções úteis embutidas.

Funções de string:

$texto = "  Programação Perl  ";
print length($texto);        # Comprimento da string
print uc($texto);            # Converter para maiúsculas
print lc($texto);            # Converter para minúsculas
print substr($texto, 0, 4);  # Extrair substring
print index($texto, "Prog"); # Encontrar posição da substring

Funções de array:

@numeros = (3, 1, 4, 1, 5, 9, 2);
print join(", ", sort @numeros);      # "1, 1, 2, 3, 4, 5, 9"
print join(", ", reverse @numeros);   # "2, 9, 5, 1, 4, 1, 3"

# Filtrar array
@filtrados = grep { $_ > 3 } @numeros;
print join(", ", @filtrados);          # "4, 5, 9"

# Transformar array
@dobrados = map { $_ * 2 } @numeros;
print join(", ", @dobrados);           # "6, 2, 8, 2, 10, 18, 4"

Funções de hash:

%pessoa = (nome => "Alice", idade => 25, cidade => "Nova York");
@chaves = keys %pessoa;      # Obter todas as chaves
@valores = values %pessoa;   # Obter todos os valores

# Verificar se a chave existe
if (exists $pessoa{idade}) {
    print "Idade existe\n";
}

9. Módulos Perl

Perl tem um ecossistema rico de módulos disponíveis através do CPAN.

Usando módulos principais:

use strict;
use warnings;
use Data::Dumper;

%dados = (nome => "Bob", idade => 30);
print Dumper(\%dados);  # Imprimir estrutura de dados formatada

Instalando e usando módulos CPAN:

# Instalar módulo do CPAN
cpan install JSON
use JSON;

# Analisar JSON
$string_json = '{"nome": "Alice", "idade": 25}';
$pessoa = decode_json($string_json);
print $pessoa->{nome};  # "Alice"

# Gerar JSON
$hash_pessoa = { nome => "Bob", idade => 30 };
$saida_json = encode_json($hash_pessoa);
print $saida_json;  # {"nome":"Bob","idade":30}

10. Guia de estilo Perl

Perl tem convenções da comunidade que promovem código limpo e legível.

Indentação: Use 4 espaços para indentação.

Nomenclatura de variáveis:

  • Use nomes descritivos
  • Siga a convenção snake_case
  • Use nomes de variáveis significativos

Organização do código:

  • Use use strict; e use warnings; no topo dos scripts
  • Declare variáveis com my para limitar o escopo
  • Use nomes de sub-rotinas significativos

Documentação:

  • Use POD (Plain Old Documentation) para documentar código
  • Inclua comentários para lógica complexa

A flexibilidade do Perl e suas poderosas capacidades de processamento de texto o tornam uma excelente escolha para tarefas de administração de sistemas, desenvolvimento web e processamento de dados. Seu rico ecossistema de módulos e forte suporte da comunidade continuam a torná-lo relevante em ambientes de programação modernos.