Conteúdo verificado

Perl

Assuntos Relacionados: Programação de Computadores

Você sabia ...

SOS acredita que a educação dá uma chance melhor na vida de crianças no mundo em desenvolvimento também. Um link rápido para o patrocínio criança é http://www.sponsor-a-child.org.uk/

Perl
Programming-republic-of-perl.png
Paradigma (s) Multi-paradigma
Apareceu em 1987
Projetado por Larry Wall
Versão estável 5.10.0 (18 de dezembro de 2007 (2007-12-18))
Disciplina Typing Dinâmico
Influenciado por AWK, BASIC , BASIC-PLUS, C , C ++ , Lisp, Pascal, sed, Shell do Unix
Influenciado Python , PHP, Ruby, ECMAScript, Dao, Windows PowerShell
OS Multi-plataforma
Licença GNU General Public License, Artistic License
  • http://www.perl.org/

Na programação de computadores, Perl é uma alto nível, propósito geral, interpretados, linguagem de programação dinâmica. Perl foi originalmente desenvolvido por Larry Wall, um linguista trabalhando como administrador de sistemas para a NASA , em 1987, como um propósito geral Unix linguagem de script para fazer o processamento do relatório easier.Since então, tem sofrido muitas mudanças e revisões e tornou-se muito popular entre os programadores. Larry Wall continua a supervisionar o desenvolvimento da linguagem núcleo, e sua mais nova versão, Perl 6.

Perl empresta características de outras linguagens de programação, incluindo C , shell script ( sh), AWK, sed e Lisp. A linguagem fornece poderosos recursos de processamento de texto sem limites de comprimento de dados arbitrários, como as muitas ferramentas Unix presentes no momento, tornando-o ideal para a manipulação de linguagem arquivos de texto. É também usado para programação de gráficos, administração do sistema, programação de rede, aplicativos que exigem acesso de banco de dados e Programação CGI na Web . Perl é apelidado como o Swiss Army motosserra das linguagens de programação por causa de sua flexibilidade e adaptabilidade.

História

Larry Wall começou a trabalhar em Perl em 1987, enquanto trabalhava como programador em Unisys, e versão 1.0 liberada para o comp.sources.misc newsgroup, em 18 de dezembro de 1987. A linguagem expandiu-se rapidamente ao longo dos próximos anos. Perl 2, lançado em 1988, contou com uma melhor mecanismo de expressão regular. Perl 3, lançado em 1989, adicionou suporte para dados binários córregos.

Originalmente, a única documentação para Perl foi uma única (cada vez mais longa) página homem. Em 1991, Perl Programação (conhecido por muitos programadores Perl como a "Camel Book") foi publicado, e tornou-se a referência de facto para o idioma. Ao mesmo tempo, o número da versão Perl foi adiado para 4, para não marcar uma grande mudança na linguagem, mas para identificar a versão que foi documentado pelo livro.

Perl 4 passou por uma série de versões de manutenção, culminando em Perl 4.036 em 1993. Nesse ponto, Wall abandonado Perl 4 para começar a trabalhar no Perl 5.

Projeto inicial do Perl 5 continuou em 1994. As perl5-porters lista de discussão foi criada em Maio de 1994 e coordena os trabalhos sobre portabilidade Perl 5 para diferentes plataformas. Ele continua a ser o principal fórum para o desenvolvimento, manutenção e operações de portabilidade dos Perl 5.

Perl 5 foi lançado em 17 de outubro de 1994. Era uma reescrita quase completa do intérprete, e acrescentou muitos recursos novos para o idioma, incluindo objetos, referências, (meus) variáveis lexicais e módulos. Importante, módulos forneceu um mecanismo para estender a linguagem sem alterar o intérprete. Isto permitiu que o intérprete núcleo para estabilizar, até mesmo, uma vez que permitiu programadores Perl comuns para adicionar novos recursos de linguagem.

A partir de 2008, Perl 5 ainda está sendo mantido ativamente. Características importantes e algumas novas construções linguísticas essenciais foram adicionados ao longo do caminho, incluindo Suporte a Unicode, threads, suporte melhorado para programação orientada a objeto e muitas outras melhorias.

Em 18 de dezembro de 2007, o 20º aniversário do Perl 1.0, Perl 5.10.0 foi lançado. Perl 5.10.0 inclui novas características notáveis, que trazem-lo mais perto Perl 6, entre eles um novo switch (chamado de "dada / quando"), atualizações de expressões regulares, o "operador jogo inteligente" ~~, e muito mais.

Um dos eventos mais importantes na história Perl 5 teve lugar fora da linguagem adequada, e foi uma consequência do seu apoio módulo. Em 26 de outubro de 1995 , o Comprehensive Perl Archive Network (CPAN) foi estabelecido como um repositório para Perl módulos e que Perl. No momento da escrita, que transporta mais de 13.500 módulos por mais de 6.500 autores. CPAN é amplamente considerado como um dos maiores pontos fortes do Perl em prática.

Nome

Perl foi originalmente chamado "Pearl", após a Parábola da Pérola do Evangelho de Mateus. Larry Wall queria dar a linguagem um nome curto com conotações positivas; ele alega que ele considerou (e rejeitado) cada palavra três e quatro letras no dicionário. Ele também considerou nomeá-lo depois que sua esposa Gloria. Parede descobriram o existente Linguagem de programação PEARL antes do lançamento oficial do Perl e mudou a grafia do nome.

O nome é normalmente capitalizados (Perl) quando se refere à linguagem e com inicial minúscula (perl) quando se refere ao programa em si intérprete desde sistemas de arquivos Unix-like são maiúsculas de minúsculas. Antes do lançamento da primeira edição de programação Perl, era comum para se referir à linguagem como perl; Randal L. Schwartz, no entanto, capitalizou o nome do idioma no livro para fazê-lo sobressair melhor quando typeset. A distinção caso foi posteriormente adoptada pela comunidade.

O nome é ocasionalmente dado como "PERL" (para a extração e relatórios prática Language). Embora a expansão tem prevalecido em muitos dos manuais de hoje, incluindo o Perl oficial página homem, é apenas um backronym. O nome não estar oficialmente para nada, então ortografia-lo em todos os tampões está incorreto. Capitalização adequada é considerado um shibboleth na comunidade Perl. Várias outras expansões foram sugeridos, incluindo o próprio bem-humorado Pathologically Eclectic Rubbish Lister de Wall. De fato, Wall afirma que o nome foi destinado a inspirar muitas expansões diferentes.

O símbolo camelo

Programação Perl, publicado pela O'Reilly Media, apresenta uma imagem de um camelo na capa, e é comumente referido como O Livro Camel. Esta imagem de um camelo se tornou um símbolo geral de Perl.

Também é um cabouqueiro emblema, aparecendo em alguns T-shirt e outros artigos de vestuário.

O'Reilly possui a imagem como uma marca, mas afirma usar apenas os seus direitos legais para proteger a "integridade e impacto desse símbolo". O'Reilly permite o uso não-comercial do símbolo, e fornece República Programação de logotipos Perl e Perl Alimentado por botões.

Visão global

Perl é uma linguagem de programação de propósito geral originalmente desenvolvido para manipulação de texto e agora usado para uma grande variedade de tarefas, incluindo administração do sistema, desenvolvimento web, programação de rede, Desenvolvimento, e mais GUI.

A linguagem destina-se a ser prático (fácil de usar, eficiente, completo) ao invés de bonita (pequena, elegante, mínimo). Suas principais características incluem suporte para vários paradigmas de programação ( processual, orientada a objeto, e estilos funcionais), contagem de referência gerenciamento de memória (sem um coletor de lixo de detecção de ciclo), suporte embutido para o processamento de texto, e uma grande coleção de de terceiros módulos.

De acordo com Larry Wall, Perl tem dois slogans. O primeiro é "Há mais de uma maneira de fazê-lo", vulgarmente conhecida como TMTOWTDI eo segundo é "coisas fáceis deve ser fácil e coisas difíceis deve ser possível".

Características

A estrutura geral do Perl deriva largamente de C. Perl é de natureza processual, com variáveis, expressões, instruções de atribuição, delimitado por cinta blocos de código, estruturas de controle, e sub-rotinas.

Perl também leva recursos de programação shell. Todas as variáveis são marcadas com liderança sigilos, que identificam inequivocamente o tipo de dados (escalar, array, mistura, etc.) da variável no contexto. É importante ressaltar que os sigilos permitir variáveis a serem interpolados diretamente em strings. Perl tem muitas funções embutidas que fornecem ferramentas muitas vezes utilizados na programação shell (embora muitas destas ferramentas são implementadas por programas externos para o shell), como triagem, e convidando facilidades do sistema.

Perl leva listas de Lisp, arrays associativos (hashes) de AWK, e expressões regulares de sed. Estes simplificar e facilitar muitos análise, manipulação de texto, e as tarefas de gerenciamento de dados.

Em Perl 5, que recursos foram adicionados complexo de suporte estruturas de dados, funções de primeira classe (ou seja, encerramentos como valores), e um modelo de programação orientada a objetos. Estes incluem referências, pacotes, método de envio de classe, e escopo léxico variáveis, juntamente com diretivas de compilador (por exemplo, o Pragma estrito). Um recurso adicional importante introduzida com Perl 5 foi a capacidade de compactar código como módulos reutilizáveis. Larry Wall indicou mais tarde que "Toda a intenção do sistema de módulos do Perl 5 foi incentivar o crescimento da cultura Perl em vez do núcleo Perl."

Todas as versões do Perl fazer digitação automática de dados e gerenciamento de memória. O intérprete conhece os requisitos de tipo e de armazenamento de cada objeto de dados no programa; ele aloca e libera armazenamento para eles conforme necessário, utilizando contagem de referência (por isso não pode desalocar estruturas de dados circulares sem intervenção manual). Legal conversões para o tipo de exemplo, as conversões de número para string-são feitas automaticamente em tempo de execução; conversões de tipo ilegais são erros fatais.

Projeto

O projeto do Perl pode ser entendida como uma resposta a três grandes tendências na indústria de computadores: queda dos custos de hardware, o aumento dos custos do trabalho, e melhorias na tecnologia de compiladores. Muitas linguagens de computador anteriores, como Fortran e C, foram projetados para fazer uso eficiente de hardware caro. Em contraste, Perl é projetado para fazer uso eficiente dos programadores de computador caro.

Perl tem muitas características que facilitam a tarefa do programador em detrimento de maiores requisitos de CPU e de memória. Estes incluem gerenciamento automático de memória; tipagem dinâmica; cordas, listas e hashes; expressões regulares; introspecção e uma função eval ().

Muralha foi treinado como um lingüista, eo desenho de Perl é muito informada por princípios lingüísticos. Exemplos incluem Huffman (construções comuns deve ser curto), bom fim-de ponderação (a informação importante deve vir em primeiro lugar), e uma grande coleção de primitivas de linguagem. Perl favorece construções de linguagem que são concisa e natural para os seres humanos a ler e escrever, mesmo quando eles complicam o intérprete Perl.

Sintaxe Perl reflete a idéia de que "coisas que são diferentes devem olhar diferente". Por exemplo, escalares, arrays e hashes tem liderança diferente sigilos. Índices de matriz e chaves de hash usar diferentes tipos de chaves. Cordas e expressões regulares têm diferentes delimitadores padrão. Esta abordagem pode ser contrastado com linguagens como Lisp, onde a mesma S-construção de expressão e sintaxe básica é usado para muitas finalidades diferentes.

Perl não aplicar qualquer paradigma de programação particular (procedural, orientada a objeto, funcionais, etc.) ou mesmo exigir que o programador para escolher entre elas.

Há uma ampla inclinação prática tanto para a linguagem Perl e da comunidade e da cultura que a cercam. O prefácio de programação Perl começa, "Perl é uma linguagem para começar seu trabalho feito." Uma consequência disto é que Perl não é uma linguagem arrumado. Ele inclui muitos recursos, tolera exceções a suas regras, e emprega heurísticas para resolver as ambiguidades sintáticas. Por causa da natureza de perdão do compilador, erros às vezes pode ser difícil de encontrar. Discutindo o comportamento variante de funções embutidas na lista e escalares contextos, o perlfunc (1) no manual diz: "Em geral, eles fazem o que você quer, a menos que queira consistência."

Perl tem vários lemas que transmitem aspectos de sua concepção e utilização. Um é " Há mais de uma maneira de fazê-lo "(TIMTOWTDI, normalmente pronunciado" Tim Toady ') Outros são. "Perl:. A Chainsaw Swiss Army of Programming Languages" e "não há limites desnecessários" Um objetivo do projeto declarado de Perl é fazer. tarefas fáceis fácil e tarefas difíceis possível. Perl também tem sido chamado de "A fita adesiva da Internet".

Não há nenhuma especificação escrita ou padrão para a linguagem Perl, e não há planos para criar um para a versão atual do Perl. Houve apenas uma implementação do intérprete. Isso intérprete, juntamente com os seus testes funcionais, se destaca como uma especificação de facto da língua.

Aplicações

Perl tem muitas e variadas aplicações, agravados pela disponibilidade de muitos módulos padrão e de terceiros.

Perl tem sido usado desde os primeiros dias da Web para escrever Scripts CGI. É conhecido como um dos "três Ps" (junto com Python e PHP), as linguagens dinâmicas mais populares para escrever aplicativos da Web. Além disso, é um componente integral do popular LAMP pilha de soluções para desenvolvimento web. Grandes projetos escritos em Perl incluem Slash, Bugzilla, TWiki e Movable Type. Muitos sites de alto tráfego, tais como bbc.co.uk, Amazon.com, LiveJournal.com, Ticketmaster.com e IMDb.com usar Perl extensivamente.

Perl é frequentemente utilizado como um linguagem de cola, amarrando junto sistemas e interfaces que não foram especificamente concebidos para interoperar, e para "dados munging", ou seja, a conversão ou processamento de grandes quantidades de dados para tarefas como a criação de relatórios. Na verdade, essas forças estão intimamente ligados. A combinação faz com que perl uma ferramenta para todos os fins popular para administradores de sistema, particularmente programas como curtas podem ser inseridos e executado em uma única linha de comando.

Com um grau de cuidado, código Perl pode ser feita portátil através de Windows e Unix. Código Perl portátil é frequentemente utilizado por fornecedores de software (ambos os COTS e sob medida) para simplificar a embalagem e manutenção de software de compilação e scripts de implantação.

Interfaces gráficas de usuário (GUI) podem ser desenvolvidos usando Perl. Em particular, Perl / Tk é comumente usado para permitir a interação do usuário com scripts Perl. Essa interação pode ser síncrona ou assíncrona usando callbacks para atualizar o GUI. Para mais informações sobre as tecnologias envolvidas ver Tk, Tcl e WxPerl.

Perl também é amplamente utilizado em finanças e bioinformática , onde é avaliado para desenvolvimento rápido de aplicações e implantação, bem como a capacidade de lidar com grandes conjuntos de dados.

Implementação

Perl é implementado como um intérprete núcleo, escrito em C, juntamente com uma grande coleção de módulos, escrito em Perl e C. A distribuição do código fonte é, a partir de 2005, 12 MB quando embalado em uma e arquivo tar comprimido. O intérprete é de 150.000 linhas de código C e compila a um executável 1 MB em arquiteturas de máquinas típicas. Alternativamente, o intérprete pode ser compilado para uma biblioteca de vínculo e incorporado em outros programas. Há cerca de 500 módulos na distribuição, compreendendo 200.000 linhas de Perl e um adicional de 350 mil linhas de código C. (Grande parte do código C nos módulos consiste em tabelas de codificação de caracteres.)

O intérprete tem uma arquitetura orientada a objetos. Todos os elementos da linguagem Perl-escalares, as matrizes, hashes, coderefs, identificadores de arquivo são representados no interpretador por estruturas C. Operações sobre estas estruturas são definidas por uma grande coleção de macros, typedefs e funções; estas constituem a API Perl C. A API Perl pode ser desconcertante para os não iniciados, mas os seus pontos de entrada seguir um esquema de nomenclatura consistente, que fornece orientações para aqueles que a usam.

A execução de um programa Perl divide amplamente em duas fases: em tempo de compilação e tempo de execução. Em tempo de compilação, o intérprete analisa o texto do programa em uma árvore de sintaxe. Em tempo de execução, ele executa o programa a pé da árvore. O texto é analisado apenas uma vez, e a árvore de sintaxe está sujeita a otimização antes de ser executado, assim que a fase de execução é relativamente eficiente. Otimizações de tempo de compilação sobre a árvore de sintaxe incluem dobrar constante e propagação de contexto, mas otimização peephole é também realizada. No entanto, em tempo de compilação e tempo de execução fases podem ninho: BEGIN blocos de código executar em tempo de compilação, enquanto o eval função inicia compilação durante a execução. Ambas as operações são uma parte implícita de uma série de outros, mais notadamente, o use cláusula que carrega bibliotecas, conhecido no Perl como módulos, implica uma BEGIN bloco.

Perl tem um sensível ao contexto gramática que pode ser afetada por código executado durante uma fase intermitente de tempo de execução. Portanto Perl não pode ser analisado por uma linha reta Lex / Yacc lexer combinação / parser. Em vez disso, o intérprete implementa sua própria lexer, que coordena com um modificado GNU parser bisonte para resolver ambigüidades na linguagem. Diz-se que "só pode analisar perl Perl", o que significa que apenas o intérprete Perl (perl) pode analisar a linguagem Perl (Perl). A verdade desta é atestada pelas imperfeições persistentes de outros programas que realizam para analisar Perl, como analisadores de código fonte e auto-penetradores, que têm de lidar não só com as muitas maneiras de expressar construções sintáticas inequívocas, mas também o fato Perl que não pode ser analisado no caso geral sem executá-lo. Apesar de bem sucedido na criação de um analisador Perl para fins relacionados ao documento, o projeto PPI determinou que a análise de código Perl como um documento (mantendo a sua integridade) e como código executável, simultaneamente, era, de fato, não é possível. Especificamente, o autor afirmou que, "análise Perl sofre do ' Problema da parada. "

Perl é distribuído com cerca de 120.000 testes funcionais. Estes funcionam como parte do processo de construção normal, e extensivamente exercer o intérprete e seus módulos principais. Desenvolvedores Perl contar com os testes funcionais para garantir que as alterações ao intérprete não introduzem erros; inversamente, os usuários Perl que vêem o intérprete passar seus testes funcionais sobre seu sistema pode ter um alto grau de confiança de que ele está funcionando corretamente.

Manutenção do intérprete Perl tornou-se cada vez mais difícil ao longo dos anos. A base de código já está em desenvolvimento contínuo desde 1994. O código foi otimizado para desempenho em detrimento da simplicidade, clareza e fortes interfaces internas. Novos recursos foram adicionados, ainda compatibilidade com versões anteriores virtualmente completa com versões anteriores é mantida. O tamanho ea complexidade do intérprete é uma barreira para os desenvolvedores que desejam trabalhar nele.

Disponibilidade

Perl é software livre e está licenciado sob a ambos Artistic License ea GNU General Public License. Distribuições estão disponíveis para a maioria sistemas operacionais. É particularmente prevalente em Unix e Sistemas Unix-like, mas foi portado para a maioria das plataformas modernas (e muitas obsoletos). Com apenas seis relatou exceções, Perl pode ser compilado a partir de código-fonte em todos os Unix-like, Plataformas POSIX ou não compatível com o Unix. No entanto, isso raramente é necessário, como Perl está incluído na instalação padrão de muitos sistemas operacionais mais populares.

Devido às alterações incomuns necessários para o Mac OS ambiente Classic, uma porta especial chamada MacPerl foi enviado de forma independente.

O CPAN carrega uma lista completa de plataformas suportadas com links para as distribuições disponíveis em cada um.

Windows

Os usuários do Microsoft Windows normalmente instalar uma das distribuições binários nativos do Perl para Win32, mais comumente ActivePerl. Compilando a partir de Perl código-fonte no Windows é possível, mas a maioria das instalações não têm o compilador C necessária e construir ferramentas. Isso também faz com que seja difícil de instalar módulos do CPAN, particularmente aqueles que são parcialmente escrito em C.

Usuários da distribuição binária ActivePerl são, portanto, dependente dos módulos reembalados previstas no Módulo repositório da ActiveState, que são pré-compilados e pode ser instalado com PPM. A escassez de recursos para manter este repositório ter sido motivo de vários problemas de longa data.

Para abordar este e outros problemas de Perl na plataforma Windows, win32.perl.org foi lançado por Adam Kennedy, em nome da A Fundação Perl em junho de 2006. Este é um site da comunidade para "todas as coisas do Windows e Perl." Um importante objetivo deste projeto é fornecer distribuições Perl alternativas de qualidade de produção que incluem um compilador C embutido e construir ferramentas, de modo a permitir que os usuários do Windows para instalar os módulos diretamente do CPAN. A distribuição de produção na família é conhecido como Morango Perl, com pesquisa e trabalho experimental feito em um relacionado Vanilla distribuição Perl.

Outra forma popular de correr Perl no Windows é fornecido pelo Camada de emulação Cygwin. Cygwin fornece um ambiente Unix-like em Windows e tanto perl cpan e estão convenientemente disponíveis como pacotes pré-compilados padrão no programa de configuração Cygwin. Uma vez que também inclui o Cygwin gcc, compilando a partir do código Perl também é possível.

Estrutura da linguagem

Em Perl, o mínimo Olá mundo programa pode ser escrito como segue:

 print "Olá, mundo! \ n"

Este imprime o seqüência Olá, mundo! e um nova linha, simbolicamente expressa por um n personagem cuja interpretação é alterado pela precedente escapar personagem (uma barra invertida).

A forma canônica do programa é um pouco mais detalhado:

 #! / Usr / bin / perl
 print "Olá, mundo! \ n";

O personagem marca de hash introduz um comentar em Perl, que vai até o final da linha de código e é ignorado pelo compilador. O comentário usada aqui é de um tipo especial: ele é chamado o linha shebang. Isto diz sistemas operacionais Unix-like onde encontrar o intérprete Perl, tornando possível chamar o programa sem mencionar explicitamente perl . (Note que no Microsoft Windows sistemas, programas Perl são tipicamente invocada pela associação do .pl extensão com o intérprete Perl. A fim de lidar com tais circunstâncias, perl detecta a linha shebang e analisa-lo para switches, por isso não é rigorosamente verdade que a linha shebang é ignorado pelo compilador.)

A segunda linha, sob a forma canónica inclui um ponto e vírgula, o qual é usado para separar as afirmações em Perl. Com apenas uma única instrução em um bloco ou um arquivo, um separador é desnecessário, por isso pode ser omitido da forma mínima do programa-ou, mais geralmente a partir da declaração final em qualquer bloco ou arquivo. A forma canônica inclui-lo porque ele é comum para finalizar cada declaração, mesmo quando não é necessário fazê-lo, pois isso torna a edição mais fácil: código pode ser adicionado ou afastou-se do fim de um bloco ou arquivo sem ter que ajustar ponto e vírgula.

Versão 5.10 do Perl introduz uma say implicitamente função que acrescenta um caractere de nova linha para a sua saída, tornando o "Olá, mundo" programa mínimo ainda mais curto:

 dizer "Olá, mundo!"

Os tipos de dados

Perl tem um número de fundamentais tipos de dados, os mais comumente utilizados e discutidos ser: escalares, matrizes, hashes, filehandles e sub-rotinas:

  • A escalar é um único valor; pode ser um número, uma corda ou uma referência
  • Um array é uma coleção ordenada de escalares
  • Um hash, ou matriz associativa, é um mapa de strings para escalares; as cordas são chamadas chaves e os escalares são chamados de valores.
  • A identificador de arquivo é um mapa para um arquivo, dispositivo ou tubo que está aberto para leitura, escrita ou ambos.
  • Uma sub-rotina é um pedaço de código que podem ser passados argumentos, ser executado, e devolver dados

A maioria das variáveis são marcadas por um líder sigilo, que identifica o tipo de dados a ser acedido (não o tipo de variável em si), excepto filehandles, que não têm um sigilo. O mesmo nome pode ser utilizado para as variáveis de diferentes tipos de dados, sem conflito.

 $ Foo # um escalar
 foo # uma matriz
 % Foo # um hash
 FOO # um identificador de arquivo
 & # FOO uma constante (mas o & é opcional)
 & # Foo uma sub-rotina (mas é opcional e o)

Identificadores de ficheiros e constantes não necessitam de estar em maiúsculas, mas é uma convenção comum devido ao facto de que não existe sigilo para denotar-los. Ambos são de âmbito mundial, mas identificadores de arquivo são intercambiáveis com referências para identificadores de arquivos, que podem ser armazenadas na escalares, que, por sua vez licença de escopo lexical. Fazer isso é incentivada em Perl Best Practices de Damian Conway. Como uma conveniência, o open função em Perl 5.6 e mais recente irá autovivify escalares indefinidos para arquivar as referências do punho.

Os números são escritos na forma nua; cordas estão entre aspas de vários tipos.

 $ Name = "Joe";
 $ Color = "vermelho";
 
 $ Number1 = 42;
 $ number2 '42' =;
 
 # Este é avaliada como verdadeira
 if ($ número1 == $ number2) {imprimir "Números e seqüências de números são os mesmos!";}
 
 $ Resposta = "A resposta é de R $ número1"; # interpolação de variáveis: A resposta é 42
 R $ preço = 'Este dispositivo custa US $ 42'; # No interpolação entre aspas simples
 
 $ Álbum = \ de David Bowie" Heróis \ ""; # citações literais dentro de uma string;
 $ Álbum = 'It \' s David Bowie \ 's "Heroes"'; # mesmo que acima com aspas simples;
 $ Álbum = q (It 's David Bowie' s "Heroes"); # a citação-como operadores q () e qq () permitem
  # Quase qualquer delimitador em vez de aspas, para
  # Evitar backslashing excessiva
 
 Multilined_string $ = <  
 

Perl irá converter cordas em números e vice-versa, dependendo do contexto em que são usados. No exemplo a seguir a cordas $ n $ e m são tratados como números quando eles são os argumentos para o operador de adição. Este código imprime o número "5", descartar informação não numérico para a operação, apesar de os valores das variáveis permanecem os mesmos. (O operador de concatenação de string é o período, e não o + símbolo.)

 N = '$ 3 maçãs';
 $ m = "2 laranjas";
 print $ n + $ m;

Perl também tem um contexto booleano que ele usa para avaliar proposições condicionais. Os seguintes valores de todos os avaliar como falso em Perl:

 $ False = 0; # o número zero
 $ False = 0,0; # o número zero como um float
 $ False = 0b0; # o número zero em binário
 $ False = 0x0; # o número zero em hexadecimal
 $ false = '0'; # a string de zero
 $ False = ""; # a cadeia vazia
 $ False = undef; # o valor de retorno de undef

Todos os outros valores são avaliados como true. Isso inclui a seqüência estranha auto-descrição literal de "0, mas é verdade", que na verdade é 0 como um número, mas é verdade quando usado como um boolean. (Qualquer string não numérica também teria essa propriedade, mas essa seqüência de caracteres especial é ignorado pelo Perl com relação a avisos numéricos.) Uma versão menos explícita, mas conceitualmente mais portátil dessa seqüência é "0E0" ou "0E0", que não faz contar com personagens sendo avaliados como 0, como "0E0" é literalmente "zero vezes dez elevado à potência zeroth."

Boolean expressões avaliadas também retornam valores escalares. Apesar de a documentação não promete que especial verdadeiro ou falso é retornado (e, portanto, não pode ser invocado), muitos operadores booleanos retornar 1 para verdadeiro eo string vazia para false (que avalia a zero em um contexto numérico). A função definida () diz se a variável tem qualquer valor definido. Nos exemplos acima definidos ($ falsa) é verdade para todos os valores excepto indefinidos.

Se um especificamente 1 ou 0 resultado (como em C) é necessária, uma conversão explícita é considerado por alguns autores que sejam necessários:

 my $ REAL_RESULT = $ boolean_result 1: 0;

No entanto, se é sabido que o valor é 1 ou undef, uma conversão implícita pode ser usado em vez disso:

 my $ REAL_RESULT = $ boolean_result + 0;

A lista está escrito, listando seus elementos, separados por vírgulas, e entre parênteses, quando o exigirem precedência do operador.

 scores = (32, 45, 16, 5);

Ele pode ser escrito muitas outras maneiras também, alguns simples e alguns nem tanto:

 # Uma forma explícita e direta
 scores = ('32', '45', '16', '5');
 
 # Equivalente ao anterior, mas o qw () operador apóstrofo-like economiza digitação de
 # aspas e vírgulas e reduz a desordem visual;  quase qualquer delimitador pode ser
 # Usado em vez de parênteses
 scores = qw (32 45 16 5);
 
 # A função de divisão retorna uma lista de strings, que são extraídos
 # A partir da expressão utilizando um modelo de regex.
 # Isso pode ser útil para a leitura de um arquivo de valores separados por vírgulas (CSV)
 scores = split /, /, '32, 45,16,5 ';
 
 # Também é possível usar um postfix para operador e de aliasing
 # A variável $ _ mágica para o próximo valor da lista durante cada
 # Iteração;  este é inútil aqui, mas expressões semelhantes são amplamente utilizados
 # Em algumas circunstâncias.
 empurrescores, $ _ foreach 32, 45, 16, 5;

Um hash pode ser inicializado a partir de uma lista de pares de chave / valor:

 % Favorito = (
  joe => 'vermelho',
  sam => 'azul'
 );

O => operador é equivalente a uma vírgula, exceto que ela assume aspas em torno do token anterior se é um identificador nua: (joe => 'red') é o mesmo que ('joe' => 'red') . Pode, portanto, ser usada para elidir aspas, melhorando a legibilidade.

Os elementos individuais de uma lista são acessadas, fornecendo um índice numérico, entre colchetes. Os valores individuais em um hash são acessadas, fornecendo a tecla correspondente, no chaves. O $ sigilo identifica o elemento acessado como um escalar.

 $ pontuações [2] # um elemento descores
 $ Favorito {joe} # um valor em% favorito

Assim, um hash também pode ser especificado definindo suas chaves individualmente:

 $ Favorito {joe} = 'vermelho';
 $ Favorito sam {} = "azul";

Vários elementos podem ser acessados usando o @ sigilo vez (identificando o resultado como uma lista).

 scores [2, 3, 1] # três elementos dascores
 favorite {'joe', 'sam'} # dois valores em% favorito
 favorite {qw (joe sam)} # mesmo que acima

O número de elementos de uma matriz pode ser obtida através da avaliação da matriz no contexto escalar ou com a ajuda de a $# sigilo. Este último dá o índice do último elemento na matriz, e não o número de elementos. Nota: o destaque de sintaxe no software da Wikipedia erradamente considera alguns dos o seguinte código para fazer parte dos comentários.

 $ Count =friends; # Atribuindo a um contexto escalar forças escalar
 
 $ # amigos; # O índice do último elemento emfriends
 $ # Amigos + 1; # Normalmente, o número de elementos emfriends é mais uma
  # $ # Amigos do que porque o primeiro elemento está no índice 0,
  # 1 não, a menos que o programador redefinir a um diferente
  # Valor, que a maioria dos manuais de Perl desencorajar.

Existem algumas funções que operam em hash inteiras.

 nomes = chaves% de endereços;
 addresses = valoriza% de endereços;
 
 # Cada chamada para cada retorna o próximo par chave / valor.
 # Todos os valores serão finalmente voltou, mas o seu fim
 # Não pode ser previsto.
 while (($ nome, $ endereço) = cada livro de endereços%) {
  print "$ name vive em US $ endereço \ n";
 }
 
 # Semelhante à anterior, mas classificados em ordem alfabética
 foreach my $ next_name (chaves de classificação de endereços%) {
  print "$ next_name vive em US $ endereços {$ next_name} \ n";
 }

As estruturas de controle

Perl tem vários tipos de estruturas de controle.

Tem estruturas de controlo orientada para blocos, semelhante aos do C, Javascript e Java linguagens de programação. Condições são cercados por parênteses, e bloqueia controladas são cercadas por chaves:

 etiqueta while (cond) {...}
 etiqueta while (cond) {...} {...} continuar
 rotular for (init-expr; cond-expr; incr-expr) {...}
 etiqueta foreach var (lista) {...}
 etiqueta foreach var (lista) {...} {...} continuar
 if (cond) {...}
 if (cond) {...} else {...}
 if (cond) {...} elsif (cond) {...} else {...}

No caso de apenas uma única instrução está sendo controlado, modificadores de declaração fornecer uma sintaxe mais concisa:

 declaração if cond;
 declaração, a menos que cond;
 while cond;
 declaração até cond;
 lista foreach declaração;

Operadores lógicos de curto-circuito são comumente usados para afetar o fluxo de controlo ao nível da expressão:

 expr e expr
 expr && expr
 expr ou expr
 expr || expr

(O "e" e "ou" operadores são semelhantes aos && e ||, mas têm menor precedência, o que torna mais fácil de usá-los para controlar declarações inteiras.)

As palavras-chave de controle de fluxo next (correspondentes a C de continue ), last (correspondente a do C break ), return , e redo são expressões, para que eles possam ser usados com os operadores de curto-circuito.

Perl também tem duas construções de iteração implícitas, cada um dos quais tem duas formas:

 results = grep {...} lista
 results = grep expr, lista
 results = map {...} lista
 results = mapa expr, lista

grep retorna todos os elementos da lista para a qual o bloco ou expressão controlada avaliada como verdadeira. map avalia o bloco controlado ou expressão para cada elemento da lista e retorna uma lista dos valores resultantes. Esses construtos permitem uma simples estilo de programação funcional.

Até o lançamento 5.10.0, não houve instrução switch em Perl 5. A partir 5.10.0 em diante, uma declaração ramo multi-modo chamado given / when está disponível, o que leva a seguinte forma:

dado (expr) {quando (cond) {...} padrão {...}}

Sintaticamente, esta estrutura se comporta de forma semelhante ao mudar do encontrado em outros idiomas declaração, mas com algumas diferenças importantes. O maior é que ao contrário de estruturas de switch / case, dado / quando as demonstrações interromper a execução após a primeira filial bem sucedida, ao invés de esperar para comandos de quebra explicitamente definidos. Por outro lado, continua explícito em vez disso são necessários para emular o comportamento do switch.

Para aqueles que não usam o lançamento 5.10.0, a documentação Perl descreve uma meia dúzia de maneiras de conseguir o mesmo efeito usando outras estruturas de controle. Há também um é Alternar módulo, que fornece a funcionalidade modelado na próxima Perl 6 re-design. Ele é implementado utilizando um filtro de origem, pelo que a sua utilização é não oficialmente desencorajado.

Perl inclui uma etiqueta Goto declaração, mas raramente é usada. Situações em que um vá para é chamado para em outros idiomas não ocorrem com tanta frequência em Perl devido à sua amplitude de opções de controle de fluxo.

Há também uma Goto & sub declaração de que efectua uma chamada de cauda. Ele termina a sub-rotina atual e imediatamente chama o especificado submarino . Isto é usado em situações em que um chamador pode executar mais eficiente gerenciamento de pilha do que a própria (normalmente porque não é necessária nenhuma alteração para o atual pilha) Perl, e em recursão profundo cauda chamada pode ter um impacto positivo substancial no desempenho porque evita a sobrecarga de escopo / pilha de gerenciamento no retorno.

Sub-rotinas

Sub-rotinas são definidas com a submarino palavra-chave, e invocou simplesmente nomeando-os. Se a sub-rotina em questão ainda não foi declarada, invocação requer tanto parênteses após o nome da função ou um e comercial ( & ) antes dele. Mas usar e sem parênteses também vai passar implicitamente os argumentos da sub-rotina atual para o chamado, e usando e com parênteses irá ignorar protótipos.

# Chamando uma sub-rotina
 
# parênteses são necessários aqui se a sub-rotina é definido mais tarde no códigofoo() ;
& foo ; # (isso também funciona, mas tem outras consequências em matéria de argumentos passados ​​para a rotina)
 
# Definição de uma sub-rotina
subfoo{ .. . }foo; # Aqui parênteses não são necessários

A lista de argumentos podem ser fornecidas após o nome da sub-rotina. Argumentos podem ser escalares, listas, ou hashes.

foo$ x , @ y , z% ;

Os parâmetros para uma sub-rotina não precisa ser declarado como a qualquer número ou tipo; na verdade, eles podem variar de chamada para chamar. Qualquer validação dos parâmetros deve ser realizada no interior da sub-rotina explicitamente.

Arrays são expandidos para seus elementos, hashes são expandidos para uma lista de pares de chave / valor, e todo o lote é passado para a sub-rotina como uma lista simples de escalares.

Quaisquer que sejam os argumentos são passados ​​estão disponíveis para a sub-rotina na matriz especial _ . Os elementos _ são alias para os argumentos reais; mudando um elemento de _ mudanças que o argumento correspondente.

Elementos de_pode ser acessado através do índice-lo da forma habitual.

$ _ [ 0 ] , $ _ [ 1 ]

No entanto, o código resultante pode ser difícil de ler, e os parâmetros têmde passagem por referência semântica, que podem ser indesejáveis.

Uma expressão comum é atribuir_a uma lista de variáveis ​​nomeadas.

 meu ( $ x , $ y , z $ ) = _ ;

Isso fornece os nomes dos parâmetros mnemônicos e implementa passam por valor semântica. A meu palavra-chave indica que as seguintes variáveis ​​possuem escopo léxico para o bloco contendo.

Outra expressão idiomática é mudar os parâmetros fora de _ . Isto é especialmente comum quando a sub-rotina tem apenas um argumento, ou para lidar com o $ Self argumento em módulos orientados a objeto.

meu $ x = turno ;

Sub-rotinas podem atribuir _ a um hash para simular argumentos nomeados; este é recomendado em Perl Best Practices para sub-rotinas que são susceptíveis de sempre a ter mais de três parâmetros.

subfunction1{
 minhas % args = _ ;
 impressão "'x' argumento era '$ args {x}'\\ n" ;
 }function1(x=> 23 ) ;

Sub-rotinas podem retornar valores.

retornar 42 , $ x , @ y , z% ;

Se a sub-rotina não sair através de um Retorna comunicado, em seguida, ele retorna a última expressão avaliada dentro do corpo sub-rotina. Arrays e hashes no valor de retorno são expandidos para listas de escalares, assim como eles são para argumentos.

A expressão retornada é avaliada no contexto de chamada de sub-rotina; este pode surpreender os incautos.

sublista{( 4 , 5 , 6 )}
submatriz{ x = ( 4 , 5 , 6 ) ; x }
 
$ x =lista; # retornos 6 - último elemento da lista
$ x =matriz; # retornos 3 - número de elementos na lista
x =lista; # retornos (4, 5, 6)
x =matriz; # retornos (4, 5, 6)

Uma sub-rotina pode descobrir seu contexto chamando com awantarrayfunção.

subquer{
 retornam wantarray ? ( 1 , 2 ) : 'laranjas' ;
 }
 
$ x =ou; # retorna "Laranjas"
x =ou; # retornos (1, 2)

As expressões regulares

A linguagem Perl inclui uma sintaxe especializada para escrever expressões regulares (RE, ou expressões regulares), eo intérprete contém um motor para cordas de correspondência para expressões regulares. O mecanismo de expressão regular usa um algoritmo de retrocesso, estendendo suas capacidades de simples correspondência de padrão para captura e substituição de cordas. O mecanismo de expressão regular é derivado de regex escrito por Henry Spencer.

A sintaxe da expressão regular Perl foi originalmente tirada de UNIX Versão 8 expressões regulares. No entanto, ele divergiu antes de a primeira versão do Perl, e desde então tem crescido para incluir muitas outras funcionalidades. Outros idiomas e aplicações estão agora a adoptar expressões regulares compatíveis com Perl mais de expressões regulares POSIX, incluindo PHP, Ruby, Java , da Microsoft .NET Framework, eo servidor Apache HTTP.

Sintaxe da expressão regular é extremamente compacto, devido à história. Os primeiros dialetos de expressões regulares foram apenas ligeiramente mais expressiva do que globs, ea sintaxe foi projetado para que uma expressão seria semelhante ao texto ele corresponde. Isso significava usar não mais do que um único caractere de pontuação ou um par de delimitar caracteres para expressar as poucas afirmações suportados. Com o tempo, a expressividade das expressões regulares cresceu tremendamente, mas o design sintaxe Nunca foi revisto e continua a confiar na pontuação. Como resultado, as expressões regulares podem ser enigmática e extremamente densa.

Usos

O // m operador (jogo) apresenta uma correspondência de expressão regular. (Se é delimitado por barras, como em todos os exemplos aqui apresentados, em seguida, o líder m pode ser omitida por questões de brevidade. Se o m estiver presente, como em todos os exemplos seguintes, outros delimitadores pode ser usado em lugar de barras.) No mais simples caso, uma expressão como

$ X = ~ m /abc/

avaliada como verdadeirase e somente se a seqüência de caracteres$ Xcorresponde a expressão regularabc.

Os ///operador (substituto), por outro lado, especifica uma operação de busca e substituir:

$ X = ~ s / abc / ABC / ; # upcase a b

Outro uso de expressões regulares é especificar delimitadores para aDivididofunção:

words = fração m /, / , $ line ;

A Dividido função cria uma lista das partes da cadeia separados por jogos da expressão regular. Neste exemplo, uma linha é dividida em uma lista das suas partes separadas por vírgulas, e, em seguida, esta lista é atribuído à words matriz.

Sintaxe

Porções de uma expressão regular pode ser colocada entre parênteses; correspondentes partes de uma seqüência correspondente são capturados . Cordas capturados são atribuídos à sequencial variáveis ​​internas $ 1, $ 2, $ 3, ... , e uma lista de strings capturados é retornado como o valor do jogo.

$ X = ~ (.) m / a c / ; # capturar o caráter entre 'a' e 'c'

Expressões regulares Perl podem tomar modificadores . Estes são os sufixos de uma só letra que modificam o significado da expressão:

$ X = ~ m / abc / i ; # case-insensitive padrão de correspondência
$ x = ~ s / abc / ABC / g ; # procura global e substituir

Desde as expressões regulares podem ser densa e enigmática por causa de sua sintaxe compacto, o / X modificador foi adicionado em Perl para ajudar os programadores a escrever expressões regulares mais legíveis. Ele permite aos programadores colocar espaços em branco e comentários dentro de expressões regulares:

$ X = ~ m /a# jogo 'a'
 . # seguido de qualquer caracterec#, em seguida, seguido pelo 'c'character
 /x;

Interfaces de banco de dados

Perl é amplamente favorecida para aplicações de banco de dados. Suas instalações de manuseio de texto são úteis para gerar consultas SQL; arrays, hashes e gerenciamento automático de memória se torna mais fácil de coletar e processar os dados retornados.

Em versões anteriores do Perl, as interfaces de banco de dados foram criadas por religação o intérprete com uma biblioteca de banco de dados do lado do cliente. Este foi suficientemente difícil que foi feito só para alguns dos bancos de dados mais importantes e amplamente utilizados, e restringiu a resultante perl executável para usar apenas uma interface de banco de dados de cada vez.

Em Perl 5, as interfaces de banco de dados são implementadas por módulos Perl DBI. O módulo DBI (Banco de Dados Interface) apresenta uma interface independente de banco de dados único para aplicações Perl, enquanto a módulos DBD (Driver de Banco de Dados) lidar com os detalhes de acesso a cerca de 50 diferentes bancos de dados; há motoristas DBD para a maioria dos ANSI bancos de dados SQL.

DBI fornece armazenamento em cache para alças de banco de dados e consultas, o que pode melhorar muito o desempenho em ambientes de execução de longa vida, tais comomod_perl, ajudando os sistemas de alto volume evitar picos de carga como noefeito Slashdot.

Desempenho comparativo

A Linguagem Informática Benchmarks Jogo comparar o desempenho de implementações de problemas de programação típicos de várias linguagens de programação. As implementações Perl apresentados eram normalmente para a grande final do espectro uso de memória, e teve resultados de velocidade variadas. Desempenho do Perl no jogo benchmarks é similar a outras linguagens interpretadas como Python, mais rápido do que PHP, e significativamente mais rápido que Ruby, mas mais lento do que línguas mais compilados.

Programas Perl pode começar mais lento do que programas similares em linguagens compiladas porque perl tem de compilar o código toda vez que ele é executado. Em uma palestra na YAPC :: Europe 2005 conferência e artigo subseqüente, "um início atempado", Jean-Louis Leroy descobriu que seus programas Perl levou muito mais tempo para executar do que ele esperava, porque o intérprete perl passou boa parte do tempo tentando encontrar módulos porque da sua sobre-grande caminho de inclusão. Porque pré-compilação ainda é uma parte experimental da Perl-ao contrário do que Java, Python e Perl programas Rubi-pagamento desta sanção sobrecarga em cada execução. Quando amortizado em uma fase de longo prazo, o tempo de inicialização normalmente não é substancial, mas a medição de muito tempos de execução curto muitas vezes pode ser distorcida como é frequentemente encontrada em benchmarks.

Uma série de ferramentas foram introduzidas para melhorar esta situação, o primeiro dos quais foi de Apachemod_perl, que procurou abordar uma das razões mais comuns que pequenos programas Perl foram invocadas rapidamente:CGIWeb. DesenvolvimentoActivePerl, via MicrosoftISAPI fornece desempenho semelhante melhorias.

Uma vez que o código Perl é compilado, há sobrecarga adicional durante a fase de execução, que normalmente não está presente para programas escritos em linguagens compiladas como C ou C ++, incluindo, entre muitas outras coisas, devido à sobrecarga de interpretação de bytecode, gerenciamento de memória de contagem de referência, e tipo dinâmico verificação.

Otimizando

Programas Perl, como qualquer código, pode ser ajustado para desempenho utilizando benchmarks e perfis, após uma implementação correcta e legível está terminado. Em parte por causa da natureza interpretada de Perl, escrevendo mais eficiente Perl nem sempre será suficiente para atender seus objetivos de desempenho para um programa.

Em tais situações, as rotinas mais críticas de um programa Perl podem ser escritos em outras linguagens como C ou Assembler, que podem ser conectados a Perl através de módulos inline simples ou mais complexo, mas flexível mecanismo XS. Nicholas Clark, um núcleo desenvolvedor Perl, discute algumas projeto Perl trade-offs e algumas soluções em perl Quando não é rápido o bastante .

Em casos extremos, otimizando Perl pode exigir conhecimento íntimo do funcionamento do intérprete em vez de habilidade com algoritmos, a linguagem Perl, ou princípios gerais de otimização.

Futuro

No 2000 Conferência de Perl, Jon Orwant feito um caso para uma nova iniciativa importante idioma. Isso levou a uma decisão de começar a trabalhar em um redesenho da língua, a ser chamado Perl 6. As propostas de novos recursos de linguagem foram solicitadas pela comunidade Perl em geral, e mais de 300 RFCs foram submetidos.

Larry Wall passou os próximos anos digerindo os RFC e sintetizando-os em um quadro coerente para Perl 6. Ele apresentou seu projeto para Perl 6 em uma série de documentos chamados "apocalipses", que são numerados para corresponder a capítulos de programação Perl ( "O Livro Camel"). A corrente especificação, ainda não finalizado de Perl 6 é encapsulado em documentos de design chamados sinopses, que são numeradas para corresponder a Apocalipses.

Perl 6 não se destina a ser compatível, no entanto, haverá um modo de compatibilidade.

Tese de trabalho por Bradley M. Kuhn, supervisionado por Larry Wall, considerado o possível uso da máquina virtual Java como um tempo de execução para Perl .. tese de Kuhn mostrou que esta abordagem é problemática, e, em 2001, decidiu-se que Perl 6 correria em um cross-language máquina virtual chamada Parrot. Isto significa que outras linguagens orientadas para o papagaio vai ganhar acesso nativo a CPAN, permitindo algum nível de desenvolvimento entre linguagens.

Em 2005 Audrey Tang criou o projecto pugs, uma implementação do Perl 6 em Haskell. Este foi e continua a agir como uma plataforma de teste para a linguagem Perl 6 (separado do desenvolvimento da execução efectiva) permitindo que os designers de linguagem para explorar. O projeto pugs gerou uma comunidade ativa entre linguagens Perl / Haskell centrado em torno da freenode # perl6 canal irc.

Uma série de características na linguagem Perl 6 agora mostram semelhanças com Haskell, e Perl 6 foi abraçado pela comunidade Haskell como uma linguagem de script potencial.

A partir de 2006, Perl 6, papagaio, pugs e estão em desenvolvimento ativo, e um novo módulo de Perl 5 chamadov6 permite algum código Perl 6 para rodar diretamente no topo do Perl 5.

Desenvolvimento de Perl 5 também continua. Perl 5.10 foi lançado em dezembro de 2007, com algumas novas funcionalidades influenciados pela concepção do Perl 6.

A comunidade Perl

Cultura e da comunidade do Perl desenvolveu ao lado da própria linguagem. Usenet foi o primeiro local público em que Perl foi introduzido, mas ao longo de sua evolução, a comunidade do Perl foi moldada pelo crescimento de ampliar serviços baseados na Internet, incluindo a introdução do Mundial Wide Web. A comunidade que o rodeia Perl foi, de fato, o tema do primeiro "State of the Onion" de Larry Wall conversa.

Estado da cebola

Estado da cebola é o nome para anuais de Larry Wall resumos de estilo palestra sobre a evolução do Perl e sua comunidade. Eles são caracterizados por seu humor marca, empregando referências a Perl e da cultura hacker mais amplo, bem como linguística e, por vezes, a sua formação cristã de Wall.

Cada conversa é primeiro dado em várias conferências Perl e, eventualmente, também publicado online.

Passatempos

Passatempos do Perl tornaram-se um elemento definidor da comunidade. Entre eles estão os usos triviais e complexos da língua.

JAPHs

No e-mail, Usenet e placa de mensagem postagens, "Apenas um outro hacker Perl "programas (JAPH) tornaram-se uma tendência comum, originada porRandal L. Schwartz, um dos primeiros treinadores Perl profissionais.

Na linguagem da cultura Perl, os programadores Perl são conhecidos como hackers Perl, ea partir deste deriva a prática de escrever programas curtos para imprimir a frase " Apenas um outro hacker Perl, ". No espírito do conceito original, esses programas são moderadamente ofuscado e curto o suficiente para caber na assinatura de uma mensagem de e-mail ou Usenet. O JAPH "canónica" inclui a vírgula no final, embora isto seja muitas vezes omitido.

Perl golf

Perl "golf" é o passatempo de reduzir o número de caracteres usados ​​em um programa Perl para o mínimo, tanto quanto como golfe jogadores procuram tirar como pancadas possível em uma rodada. Este uso da palavra "golf", originalmente focado nas JAPHs utilizados em assinaturas de publicações Usenet e em outros lugares, embora as mesmas acrobacias tinha sido um passatempo sem nome na língua APL em décadas anteriores. O uso de Perl para escrever um programa que executou criptografia RSA solicitado um interesse generalizado e prático neste passatempo. Nos anos seguintes, código de golfe foi tomado como um passatempo em outros idiomas além do Perl.

Ofuscação

Tal como acontece com C,competições código ofuscado são um passatempo conhecido. O relatório anual ofuscado concurso Perl fez uma virtude arco de flexibilidade sintática do Perl.

Poesia

Semelhante ao código ofuscado e golfe, mas com um propósito diferente, Perl poesia é a prática de escrever poemas que pode realmente ser compilado como legal (embora geralmente não sensical) de código Perl. Este passatempo é mais ou menos a única Perl, devido ao grande número de palavras inglesas regulares usados ​​na língua. Novos poemas são publicados regularmente na secção Poesia Perl site Perl Monks.

CPAN Acme

Há também muitos exemplos de código escritas puramente para entretenimento no CPAN. Lingua :: :: Romana Perligata , por exemplo, permite que os programas de escrita em latim . Após a execução de um programa deste tipo, o módulo traduz o seu código-fonte em Perl regular e executa-lo.

A comunidade Perl pôs de lado o " namespace Acme "para os módulos que são divertidas na natureza (mas o seu âmbito alargou-se para incluir o código exploratória ou experimental ou qualquer outro módulo que não pretende nunca ser utilizado na produção). Alguns dos módulos Acme são deliberadamente implementado em maneiras divertido. Isso inclui Acme :: Bleach , um dos primeiros módulos no Acme :: espaço de nomes, o que permite que o código-fonte do programa a ser "embranquecida" (ou seja, todos os caracteres substituídos por espaços em branco) e ainda continuam a trabalhar.

Retirado de " http://en.wikipedia.org/w/index.php?title=Perl&oldid=227514814 "