====== perl ====== Apesar de não [[utils:glossario#p|padronizado]] :?:, o interpretador __perl__ possui uma longa tradição de distribuição conjunta com o sistema UNIX, tendo depois extrapolado para outros sistemas. Sua inspiração parte de outros utilitários como __sed__, __awk__ e o próprio Shell do UNIX, além de ter importado ideias da linguagem C, e portanto acaba misturando uma dinâmica para processamento de texto com interação com o sistema operacional (criar e remover arquivos ou diretórios, interagir com soquetes e até mesmo gerenciar processos). Usa-se o termo __perl__ em referência ao interpretador propriamente, que está disponível como comando do sistema oepracional, enquanto o termo __Perl__ é usado em referência à linguagem utilizada pelo interpretador para executar os comandos. Como estamos no contexto de utilitários, o foco deste artigo será o interpretador __perl__. Para mais informações sobre a linguagem __Perl__ consulte a seção referente no contexto de programação ([[prog:|prog]]). ===== Usos ===== __perl__ é um utilitário de [[utils:glossario#l|linha de comando]] :?: que ficou bastante conhecido pelo termo //one-liner// (de uma linha), em referência aos diversos usos versáteis que podem ser feitos do interpretador com apenas uma linha de comando. Apesar disso, é comum também o uso do interpretador para apenas acionar um programa armazenado em um ou mais arquivos. Programa esse que pode ser um simples //script// de poucas linhas ou uma aplicação complexa distribuída em vários módulos. Seja como for, a linguagem __Perl__ é utilizada para elaborar esses programas. Para explorar os recursos do interpretador propriamente, nosso foco nesse documento será principalmente o uso da linha de comando, porém em algumas ocasiões vamos demonstrar o uso de programas também. É muito comum o uso de __perl__ para realizar transformações sobre conjuntos de dados, que podem ser lidos e gravados em arquivos, ou obtidos/repassados para outros programas disponíveis no sistema, ou ainda de/para sistemas remotos. Os recursos para processamento de texto presentes na linguagem __Perl__ (e portanto acessíveis pelo interpretador __perl__) são muito ricos, sobretudo se considerarmos o motor de expressões regulares e o suporte a diferentes codificações de texto. Sistemas Web em particular se beneficiam bastante dessa característica. Além de ser bom para trabalhar com texto, __perl__ também pode ser usado para interagir com sistemas de arquivos, processos externos e com soquetes, e possui nativamente módulos para lidar com diversos formatos de arquivos e algoritmos comuns (como de compressão, por exemplo) sendo também útil para funções de administração de sistemas. E ainda é comum também o uso de __perl__ para elaborar roteiros de testes de outros programas, devido ao seu amplo suporte a módulos de teste e ao protocolo [[https://testanything.org/|TAP]]. ===== Noções básicas ===== Para aprender a usar __perl__, vamos começar detalhando alguns conceitos comuns da sua terminologia: * **Campo** O conteúdo de cada registro lido/escrito pelo interpretador pode ser subdividido por algum delimitador. Nesse caso, o resultado dessa divisão é uma lista onde cada item é um campo. * **Expressão regular** Vide [[prog:regex|expressões regulares]]. __perl__ obviamente utiliza o padrão Perl. * **Registro** Tanto o que é lido pelo interpretador (entrada) quanto o que é escrito (saída) é organizado como uma lista de registros. Na prática, cada registro é uma linha, mas pode-se definir outros delimitadores para o conceito de registro (inclusive nenhum delimitador, para trabalhar com conteúdo binário). ===== Usando perl ===== O interpretador __perl__ é ultra sofisticado. Ele foi projetado para que com uma única linha de comando você consiga alavancar vários recursos da linguagem __Perl__, sem a necessidade de criar um //script// com o código equivalente. Existem opções para definir delimitadores de campos, delimitadores de linhas, codificação dos caracteres, laços iterativos para definir ações específicas sobre cada linha, e diversas outras opções. Isso permite que você explore combinações diferentes de opções, para alcançar diferentes resultados. Isso obviamente não significa que você não possa criar seus //scripts// também, e pode inclusive combiná-los com as opções de linha de comando, se preferir. Mas antes de passar para cenários mais avançados, vamos começar pelos cenários de uso mais simples. Primeiro de tudo, é sempre bom verificar qual versão você está utilizando (utilizando a opção ''-v''). Digite no seu terminal o seguinte comando: $ perl -v Será apresentado, além da versão, uma nota de direitos autorais, revelando a licença aplicável (Artística ou GPL), além de instruções sobre onde encontrar mais informações sobre __Perl__. Para ver a lista completa de opções, você pode usar a opção ''-h'' (ou ''-?''). Essas opções mostram apenas uma lista resumida, mas se quiser uma descrição mais detalhada, você pode usar o utilitário __perldoc__ distribuído junto com __perl__, conforme a seguir: $ perldoc perlrun Este utilitário processa textos de ajuda, organizados por tópicos (sendo ''perlrun'' um dos tópicos, referente à linha de comando), e direciona para um paginador de texto (como __less__). Em sistemas tipo UNIX, é comum a distribuição de páginas de manual (//man pages//) junto com __perl__, portanto você provavelmente pode acessar o mesmo conteúdo com o comando a seguir. $ man perlrun ... ===== Especificação ===== Toda a especificação (do interpretador e da linguagem) está disponível [[https://perldoc.perl.org/|aqui]]. ===== Distribuição ===== ...