Aneutralidade deste artigo foi questionada.(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 emelhore a coerência e o rigor deste artigo. Considere colocar uma explicação mais detalhada nadiscussão.(outubro de 2010)
Originalmente, Perl foi desenvolvida porLarry 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 deprogramas em ambientesUNIX,MSDOS,Windows,Macintosh,OS/2 e outrossistemas operacionais. Além de ser muito utilizada para programação de formulárioswww e em tarefas administrativas de sistemas UNIX - onde a linguagem nasceu e se desenvolveu -, possui funções muito eficientes para manipulação de textos. Seuslogan "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.
A linguagem Perl foi desenvolvida[7] porLarry Wall. Inicialmente, o nome seria "PEARL", porém já existia uma linguagem com esse nome, entãoWall alterou para "Perl".[4] Seu lançamento deu-se em1987 (4 anos antes doLinux) quando Larry postou o Perl no grupo de notícias daUsenet "comp.sources". Antes disso, praticamente todo processamento de texto em sistemas baseados emUnix era feito com uma porção de ferramentas, tais como oAWK, 'sed',C e diversas linguagensshell 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]
No geral, a sintaxe de um programa em Perl se parece muito com a de um programa emC: 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 deshell 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 destrings. 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 deLisp, asarrays associativas (tabelas hash) deawk e asexpressões regulares desed. 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 daprogramação funcional (as funções são vistas como um outro valor qualquer para uma sub-rotina, por exemplo) e um modelo deprogramaçã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 etipagem 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.
A linguagem Perl foi criada e desenvolvida com o ideal deSoftware 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 é aCPAN,Comprehensive Perl Archive Network (rede de repositórios de Perl). Esterepositório possui mais de 100 mil módulos para Perl, bem como suas documentações.[10]
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.
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;
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, umastring 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) destrings 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
# Isto é um comentário em Perl=beginEste é um comentáriode múltiplas linhasem 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]
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 umpattern (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 deLinguagens 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 deETL.
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.
Olaço for em Perl segue o mesmo estilo dalinguagem C, inicializando uma variável, determinando seu limite e o passo do incremento. O código abaixo é um exemplo defor em Perl, imprimindo, a cada iteração, o valor da variáveli, indo de 0 a 5.[15]
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:
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]
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 denominadosPerl Mongers.
Um grande ponto de encontro da comunidade é oYAPC. YAPCs são encontros promovidos pela comunidade para discutir coisas sobre Perl, os encontros podem ter caráter regional ou nacional. NoBrasil 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].