Perl

Nota: Para outros significados, veja Perl (desambiguação).

Esta página cita fontes, mas que não cobrem todo o conteúdo. Ajude a inserir referências (Encontre fontes: Google (N • L • A • I • WP refs)  • ABW • CAPES). (Março de 2018)

|

A neutralidade deste artigo foi questionada. Discussão relevante pode ser encontrada na página de discussão. (Março de 2018)

|

Esta página ou seção foi marcada para revisão devido a incoerências ou dados de confiabilidade duvidosa. . Se tem algum conhecimento sobre o tema, por favor, verifique e melhore a coerência e o rigor deste artigo.
Considere colocar uma explicação mais detalhada na discussão. (Outubro de 2010)

|

Perl

Paradigma| Multiparadigma:

* funcional
* imperativa
* orientada a objetos
* reflexiva
* estruturada
* genérica

Surgido em| 1987
Última versão| 5.38.0 (2 de julho de 2023; há 2 anos[1])
Criado por| Larry Wall
Estilo de tipagem| dinâmica
Influenciada por|

* AWK
* C
* C++
* Lisp
* Pascal
* sed
* Shell script
* Smalltalk

Influenciou|

* ECMAScript
* Falcon
* JavaScript
* PHP
* PowerShell
* Python
* Raku
* Ruby

Licença| GNU GPLv1+ / Artística[2]
Extensão do arquivo|

* .pl
* .plx
* .pm
* .t
* .pod
* .xs

Página oficial| www.perl.org

Perl é uma família de duas linguagens de programação multiplataforma, Perl 5 e Perl 6.[3]

Originalmente, Perl foi desenvolvida por Larry Wall em 1987; desde então, a linguagem passou por muitas atualizações e revisões até chegar à versão Perl 5 em 1994.[4] Perl 6, desenvolvido a partir do Perl 5 em 2000, eventualmente evoluiu para uma linguagem distinta. Ambas as linguagens continuam a ser desenvolvidas independentemente por equipes diferentes.

Perl é usada em aplicações de CGI para a web[5], para administração de sistemas linux e por várias aplicações que necessitam de facilidade de manipulação de strings[6]. Permite a criação de programas em ambientes UNIX, MSDOS, Windows, Macintosh, OS/2 e outros sistemas operacionais. Além de ser muito utilizada para programação de formulários www e em tarefas administrativas de sistemas UNIX - onde a linguagem nasceu e se desenvolveu -, possui funções muito eficientes para manipulação de textos. Seu slogan "There's more than one way to do it" (Existe mais de uma maneira de fazer isso) demonstra exatamente o propósito da linguagem: sua flexibilidade e capacidade de fazer códigos funcionais.

## Origem

[editar | editar código fonte]

A linguagem Perl foi desenvolvida[7] por Larry Wall. Inicialmente, o nome seria "PEARL", porém já existia uma linguagem com esse nome, então Wall alterou para "Perl".[4] Seu lançamento deu-se em 1987 (4 anos antes do Linux) quando Larry postou o Perl no grupo de notícias da Usenet "comp.sources". Antes disso, praticamente todo processamento de texto em sistemas baseados em Unix era feito com uma porção de ferramentas, tais como o AWK, 'sed', C e diversas linguagens shell script. A ideia de Wall foi juntar as principais vantagens de todas essas linguagens: expressões regulares do 'sed'; a identificação de padrões de AWK; a profundidade de C; além da sintaxe baseada tanto em C quanto em Shell Script.

Pouco tempo depois de sua primeira versão, Perl se popularizou. Originalmente, a única documentação existente era uma única página de manual, até que, em 1991, foi publicada a referência definitiva da linguagem, Programming Perl, que ficou conhecida pelos programadores como o "livro do camelo”, por conta da imagem em sua capa.[4] Em 1992, Perl já estava na versão 4 e tornou-se uma linguagem padrão para Unix. Porém, foi também nessa época que a linguagem de Larry começou a mostrar suas limitações. Apesar de ser excelente para administradores de sistemas escreverem pequenos e poderosos códigos, era inviável desenvolver programas maiores com o Perl. Foi quando a equipe, ainda liderada por Larry Wall, começou a desenvolver a versão 5, lançada em 1994. A partir de então, a linguagem subiu de patamar; tornou-se, como muitos acreditam, uma linguagem completa, e não apenas auxiliar.[8][9]

## Histórico de versões (Perl 1.0 a 5.28)

[editar | editar código fonte]

Histórico Versão  | Ano de lançamento

|

1.0  | 1987
2.0  | 1988
3.0  | 1989
4.0  | 1993
5.0  | 1994
5.005  | 1998
5.6  | 2000
5.8  | 2000
5.10  | 2008
5.11  | 2009
5.12  | 2010
5.14  | 2011
5.16  | 2012
5.18  | 2013
5.20  | 2014
5.22  | 2015
5.24  | 2016
5.26  | 2017
5.28  | 2018

[4]

## Características da linguagem

[editar | editar código fonte]

Atractor de Lorenz calculado com octave e convertido para SVG utilizando um script Perl

No geral, a sintaxe de um programa em Perl se parece muito com a de um programa em C: existem variáveis, expressões, atribuições, blocos de código delimitados, estruturas de controle e sub-rotinas.

Além disso, Perl foi bastante influenciado pelas linguagens de shell script: todas as variáveis escalares são precedidas por um cifrão (`$`). Essa marcação permite identificar perfeitamente as variáveis num programa, onde quer que elas estejam. Um dos melhores exemplos da utilidade desse recurso é a interpolação de variáveis diretamente no conteúdo de strings. Perl também possui muitas funções integradas para tarefas comuns como ordenação e acesso de arquivos em disco.

Perl pega emprestado as listas de Lisp, as arrays associativas (tabelas hash) de awk e as expressões regulares de sed. Isso tudo simplifica e facilita qualquer forma de interpretação e tratamentos de textos e dados em geral.

A linguagem suporta estruturas de dados arbitrariamente complexas. Ela também possui recursos vindos da programação funcional (as funções são vistas como um outro valor qualquer para uma sub-rotina, por exemplo) e um modelo de programação orientada a objetos. Perl também possui variáveis com escopo léxico, que tornam mais fácil a escrita de código mais robusto e modularizado.

Todas as versões de Perl possuem gerenciamento de memória automático e tipagem dinâmica. Os tipos e necessidades de cada objeto de dados no programa são determinados automaticamente; memória é alocada ou liberada de acordo com o necessário. A conversão entre tipos de variáveis é feita automaticamente em tempo de execução e conversões ilegais são erros fatais.

### Pontos Fortes

[editar | editar código fonte]

* Perl é muito portátil (multiplataforma);
* Perl é excelente para manipulação de textos e arquivos;
* Perl é uma Linguagem de programação de alto nível, tirando do programador muitas preocupações referentes a aspectos mais baixos;
* A linguagem Perl foi criada e desenvolvida com o ideal de Software livre. Esse aspecto tornou-se uma característica intrínseca e os programadores contam com uma ampla comunidade, que ajuda no desenvolvimento e manutenção da linguagem e dos códigos. Exemplo disso é a CPAN, Comprehensive Perl Archive Network (rede de repositórios de Perl). Este repositório possui mais de 100 mil módulos para Perl, bem como suas documentações.[10]

### Pontos Fracos

[editar | editar código fonte]

* Scripts escritos em Perl são bem mais lentos que os de outras linguagens compiladas, isto é devido a existência do interpretador;
* Um pequeno código PERL é capaz de realizar muitas ações. Em termos de linguagem de programação, isso geralmente significa que o código será difícil de ler e penoso de escrever;
* Scripts escritos em Perl permitem a visualização do código fonte, impedindo os programadores de esconder o código.
* Perl não possibilita o acesso a funções de baixo nível, reduzindo a liberdade do programador nestes tipos de caso.

### Resumo

[editar | editar código fonte]

* Sua interface de integração com banco de dados (DBI e DBIx::Class) suporta muitos bancos de dados, incluindo Oracle, Sybase, PostgreSQL, MySQL e outros
* Perl tem módulos para trabalhar com HTML, XML, e outras linguagens de markup
* Perl suporta Unicode
* Perl permite programação procedural e orientada a objetos
* Perl pode acessar bibliotecas externas em C/C++ através de XS ou SWIG
* Perl é extensível. Existem milhares de módulos disponíveis no Comprehensive Perl Archive Network (CPAN)
* O interpretador Perl pode ser embutido em outros sistemas

### Perl e a World Wide Web

[editar | editar código fonte]

* Perl é conhecida como o "Canivete Suíço da Internet";[11]
* O módulo Perl CGI.pm, que faz parte da distribuição padrão, serve como script do lado do servidor
* Perl pode manipular dados criptografados, incluindo transações de comércio eletrônico;
* mod perl permite que o servidor web Apache possa interpretar códigos Perl diretamente;
* O pacote DBI do Perl faz com que a integração com banco de dados seja muito simples. E com pacote DBIx::Class, utiliza-se orientação a objetos para trabalhar diretamente com bancos de dados;
* Existe um Web Framework (servidores web) chamado Catalyst que é feito em Perl, bastante utilizado;

### Portabilidade

[editar | editar código fonte]

* Perl é uma linguagem que já foi portada para diversos sistemas operacionais;

## Tipos de dados

[editar | editar código fonte]

O Perl tem uma série de tipos de dados fundamentais, porém é considerada uma linguagem não tipada, ou seja, as variáveis não são restringidas a usar um único tipo. Os mais utilizados são: escalar, vetor (array), hash (vetor associativo), handle de um arquivo e sub-rotinas.

* Escalar: é um valor único, que pode ser um número, uma string ou uma referência. É declarada com um '$', como:

$num = 34;
$nome = "joe";
$pi = 3.14;

* Array: é um conjunto sequencial ordenado de escalares. O índice inicial de uma variável array é zero (0). É declarada com um '@', como:

@numeros = (1,2,3);

* Hash: Um hash, ou array associativo, é um mapeamento (ou seja, chaves de referências) de strings para escalares. Representa uma coleção de pares de chave/valor. São declarados com um '%', como:

%hash = (1,"a",2,"b",3,"c");

* Handle: é um mapeamento para um arquivo, dispositivo ou pipe, que é aberto para leitura, escrita, ou ambos
* Sub-rotina: é um trecho de código que pode ser executado, para o qual podem ser passados argumentos, e do qual podem ser recebidos resultados

## Exemplos de código

[editar | editar código fonte]

A primeira linha de um código em Perl deve sempre começar com o shebang:

# !/usr/bin/perl

Esta linha informa onde está localizado o compilador do Perl e pode variar de sistema para sistema.

### Programa Olá Mundo!

[editar | editar código fonte]

Ver artigo principal: Programa Olá Mundo

# !/usr/bin/perl
print "Olá, Mundo!\n";

### Comentário

[editar | editar código fonte]

# Isto é um comentário em Perl

=begin
Este é um comentário
de múltiplas linhas
em Perl
=cut

Note o ponto e vírgula no final de cada expressão. Assim como em C e C++, Perl exige que o usemos para indicar o final de uma expressão. A última linha é a que apaga o arquivo. unlink equivale a 'rm' e $0 é uma referência simples ao arquivo que está sendo executado.[12]

### Expressão regular - Filtro

[editar | editar código fonte]

Um dos pontos fortes de Perl é o eficiente uso de expressões regulares no tratamento de textos e arquivos. Identificamos essas expressões pelos delimitadores "/.../", ou seja, tudo o que estiver entre essas barras será tratado como um pattern (padrão) para ser encontrado em determinado texto. O programa a seguir lê um texto e busca exatamente a expressão "foo":

while(<>) {
/foo/;
print;

Assim como as expressões regulares de Linguagens Regulares, Perl admite alguns símbolos especiais que facilitam a descrição de um padrão. São eles:

* "."
* "*"
* "?"
* "+"
* "[" e "]"
* "(" e ")"
* "{" e "}"
* "^"
* "$"
* "|"
* "\"

Se quisermos utilizar o real significado de um desses símbolos, basta colocarmos uma barra invertida exatamente antes do mesmo.[13]

O código abaixo busca o padrão assim descrito: nenhum ou muitos '+' seguido de um ou nenhum 'b'

while (<>) {
/\+*b?/
print;

É possível obter o mesmo resultado com uma única linha (um "one-liner"):

perl -pi -e '/\+*b?/' arquivo.txt

De fato, é comum a ocorrência de problemas que exigem dezenas de linhas em outras linguagens de programação mas que podem ser resolvidos com uma única linha de código em Perl, especialmente na área de ETL.

### Strings

[editar | editar código fonte]

Em Perl, strings podem ser descritas com aspas duplas ou simples, porém estas descrevem a string literalmente, enquanto aquelas interpretam símbolos de código. Exemplificando, as duas linhas de código a seguir resultam em saídas diferentes:[14]

print "Hello World!\n";
print 'Hello World!\n';

Saída:

Hello World!

Hello World!\n

Na primeira linha, com aspas duplas, o símbolo \n é interpretado como uma quebra de linha, enquanto, na segunda linha, o símbolo é impresso literalmente.

## Estruturas de controle

[editar | editar código fonte]

Perl tem as estruturas básicas esperadas em qualquer linguagem de programação:

* if
* while
* for
* until

Perl tira boas ideias de linguagens naturais, como a possibilidade de inverter a ordem dos elementos em uma frase. Por exemplo:

if ($DEBUG) {
print "ouch!";

Pode ser reescrita como:

print "ouch!" if $DEBUG;

### Laço For

[editar | editar código fonte]

O laço for em Perl segue o mesmo estilo da linguagem C, inicializando uma variável, determinando seu limite e o passo do incremento. O código abaixo é um exemplo de for em Perl, imprimindo, a cada iteração, o valor da variável i, indo de 0 a 5.[15]

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

## Módulos e frameworks

[editar | editar código fonte]

Perl conseguiu reunir módulos, classes, scripts e frameworks desenvolvidos pela comunidade em um só lugar, este lugar chama-se CPAN, repositório onde encontra-se quase tudo já desenvolvido para a linguagem:

* Catalyst (software) \- Framework MVC para aplicações Web
* DBIx::Class \- Modelo de mapeamento Objeto Relacional
* Template Toolkit \- Sistema de processamento de templates
* WWW::Mechanize \- Simula um navegador Web em um objeto Perl
* POE \- Framework para aplicações multitarefa e em rede portáveis

## Interpretador Perl

[editar | editar código fonte]

Se você está num sistema Linux (ou a maioria dos sistemas UNIX, incluindo Mac Os X), provavelmente já há uma instalação do compilador Perl incluída no seu sistema. Digite o seguinte comando no terminal para descobrir qual versão você tem instalada:[16]

perl -v

## Aplicações

[editar | editar código fonte]

* TWiki \- Sistema Wiki de escrita de conteúdo colaborativo
* RT \- Sistema de processamento de Tickets
* Apache Spam Assassin \- Sistema extensível de filtro de Spam em email
* dvd::rip \- Programa para cópias de DVD
* AWStats \- "Advanced Web Statistics" (AWStats) é um sistema de análise de logs de servidores Web e de geração de estatísticas
* DuckDuckGo \- Motor de busca com a filosofia de não registrar as informações do usuário.[17]

## Comunidade

[editar | editar código fonte]

Um dos pontos mais fortes da linguagem Perl é a comunidade de usuários em todo o mundo. Segundo a tradição internacional, esses grupos são denominados Perl Mongers.

Um grande ponto de encontro da comunidade é o YAPC. YAPCs são encontros promovidos pela comunidade para discutir coisas sobre Perl, os encontros podem ter caráter regional ou nacional. No Brasil ocorre uma vez por ano o YAPC::Brasil "Encontro Brasileiro de Programadores Perl".

Em 2009 o YAPC::Brasil aconteceu de 29 de outubro a 1 de novembro em Niterói, Rio de Janeiro[18]. Em 2010 o evento ocorreu de 25 a 31 de outubro em Fortaleza, Ceará[19]. Em 2013, o evento ocorreu nos dias 15 e 16 de Novembro, em Curitiba, Paraná. Em 2014, o evento foi realizado em Itapema, Santa Catarina, nos dias 19 e 20 de Setembro[20].

## Ver também

[editar | editar código fonte]

* Portal das tecnologias de informação

Outros projetos Wikimedia também contêm material sobre este tema:

| Livros e manuais no Wikilivros

* Wikilivros

* PHP
* Python
* Ruby (linguagem de programação)

## Referências

1. ↑ «Perl 5.38.0 is now available!». www.nntp.perl.org. 2 de julho de 2023. Consultado em 18 de outubro de 2023
2. ↑ «Perl Licensing». dev.perl.org. Consultado em 20 de março de 2018
3. ↑ «About Perl - www.perl.org». www.perl.org. Consultado em 8 de março de 2019
4. ↑ a b c d «History of Perl». Perl (em inglês). Consultado em 8 de março de 2019
5. ↑ «Programação CGI usando a linguagem Perl». www.ime.usp.br. Consultado em 6 de novembro de 2015
6. ↑ «Projeto de Iniciação Científica - Linguagem Perl». www.ime.usp.br. Consultado em 6 de novembro de 2015
7. ↑ «Perl creator Larry Wall: Rethought version 6 due this year». InfoWorld. Consultado em 10 de janeiro de 2016
8. ↑ «A.1 A Brief History of Perl». www.linuxutopia.org. Consultado em 31 de Março de 2013
9. ↑ Cozens,Simon; Wainwright,Peter (2000). Beginning Perl (em inglês) 1a. ed. [S.l.]: Wrox Press. 700 páginas. ISBN 1861003145 A referência emprega parâmetros obsoletos `|coautor=` (ajuda); `|acessodata=` requer `|url=` (ajuda)
10. ↑ «The Comprehensive Perl Archive Network». Consultado em 31 de Março de 2013
11. ↑ Cozens,Simon; Wainwright,Peter (2000). Beginning Perl (em inglês) 1a. ed. [S.l.]: Wrox Press. p. 4\. 700 páginas. ISBN 1861003145 A referência emprega parâmetros obsoletos `|coautor=` (ajuda); `|acessodata=` requer `|url=` (ajuda)
12. ↑ «Aprendendo Perl, Parte 1 LG #61». www.gacetadelinux.com. Consultado em 13 de Março de 2011
13. ↑ «Linguagem Perl - Expressões Regulares». www.numaboa.com.br. Consultado em 31 de Março de 2013
14. ↑ «Perl String». Perl Tutorial (em inglês). Consultado em 16 de março de 2019
15. ↑ «Perl for loops». www.perl.com (em inglês). Consultado em 16 de março de 2019
16. ↑ «Download Perl - www.perl.org». www.perl.org. Consultado em 13 de Março de 2011
17. ↑ «DuckDuckGo: A New Search Engine Built from Open Source». 10 de julho de 2010. Consultado em 25 de outubro de 2015. Arquivado do original em 17 de março de 2011
18. ↑ Site do YAPC::Brasil 2009
19. ↑ «Site do YAPC::Brasil 2010». Consultado em 1 de agosto de 2010. Arquivado do original em 19 de julho de 2014
20. ↑ «Site do YAPC::Brasil 2014». Consultado em 9 de janeiro de 2015. Arquivado do original em 9 de janeiro de 2015

## Bibliografia

[editar | editar código fonte]

Livro: PERL Guia de Consulta Rápida, Autor: Décio Jr., Editora Novatec, ISBN 85-85184-80-9

## Ligações externas

[editar | editar código fonte]

* Sítio oficial
* «Documentação oficial» (em inglês)

* v
* d
* e

Linguagens de programação

Esotéricas * Comparação * História * Turing completude * Programa Olá Mundo * Algoritmo TPK * Quine

* Ada
* Assembly
* BASIC
* C
* C++
* C#
* COBOL
* Dart
* Elixir
* Erlang
* Fortran
* Go
* Haskell
* Java
* JavaScript
* Julia
* Kotlin
* Lisp
* Lua
* ML
* Pascal
* Perl
* PHP
* Python
* R
* Ruby
* Rust
* Scala
* Shell
* Smalltalk
* SQL
* Swift
* mais...

Categoria * Lista
*[ABW]: A Biblioteca da Wikipédia
*[v]: Ver esta predefinição
*[d]: Discutir esta predefinição
*[e]: Editar esta predefinição