Perl

# Pelr

Perl é uma linguagem de programação multiplataforma usada em aplicações de CGI  web, para administração de sistemas linux e aplicações que necessitam  manipulação de strings de maneira fácil. 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.

## Histórico

### Uma breve histórico sobre Perl

Em meados da década de 1980, Larry Wall estava trabalhando como administrador de sistemas e descobriu que precisava fazer várias funções comuns, porém excêntricas, repetidas vezes. E ele não gostou de nenhuma das linguagens de script que existiam na época, então desenvolveu a linguagem Perl. \cite{london2010}

Foram reunidos os melhores recursos de várias linguagens: as poderosas expressões regulares do sed (o editor de fluxo do UNIX), o awk da linguagem de varredura de padrões e algumas outras linguagens e utilitários. A sintaxe foi feita a partir de linguagens de shell C, Pascal, Basic, UNIX, Inglês e talvez algumas outras coisas ao longo do caminho. \cite{simon2000}

A versão 1 de Perl chegou ao mundo em 18 de dezembro de 1987, e a linguagem vem se desenvolvendo constantemente desde então, com contribuições de inúmeras pessoas. O Perl 2 expandiu o suporte à expressão regular, enquanto o Perl 3 permitiu que o trabalho com dados binários. \cite{simon2000} Em 1992, encontrava-se já 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.

O Perl 5 viu algumas mudanças drásticas na sintaxe e extensões bastante fantásticas, sendo (mais ou menos) compatível com versões anteriores da linguagem, mas ao mesmo tempo, tornando muito obsoleto o código antigo. O código Perl 4 ainda pode ser executado, mas o estilo é definitivamente desaprovado nesses dias.\cite{simon2000}

Algumas características do Perl 5 são abordadas por \cite{simon2000}:

* Perl é uma linguagem compilada/interpretada ou 'byte-compiled.
* Perl é muito fácil de aprender, e pouco conhecimento de Perl pode te ajudar muito.
* Perl foi projetado com o intuito de ser fácil para os humanos escreverem, em vez de ser fácil para os computadores entenderem. A sintaxe da linguagem é muito mais como uma linguagem humana do que as estritas e rígidas gramáticas e estruturas de outras linguagens.
* Perl está disponível para uma enorme variedade de sistemas operacionais e computadores, e programas escritos adequadamente devem ser executados praticamente em qualquer lugar.
* Perl se comunica através do texto, já em que outras linguagens a comunicação é dada através de caractere por vez. Ele também pensa em arquivos em termos de linhas, não em bytes individuais. Suas 'expressões regulares' permitem que você procure e transforme textos de inúmeras maneiras com facilidade e rapidez.
* Perl é o que é chamado de "linguagem de alto nível". Algumas linguagens, como o C, referem-se a detalhes de "baixo nível" sobre a operação do computador: garantir que você tenha memória livre suficiente, verificando se todas as partes do programa estão configuradas corretamente antes de tentar usá-las. erros estranhos e hostis se você não fizer isso. Perl não trabalha com essas operações.

#### 3. Análise

As sub-sessões a seguir constituem uma análise utilizando-se dos critérios de avaliação

para formular questionamentos, possibilitando a caracterização da linguagem a partir de

suas respostas.

#### 3.1. Legibilidade

##### 3.1.1. Simplicidade: A linguagem possui muitas construções básicas?

Em sua versão 5.28, segundo o site (https://www.perl.org/docs.html) oficial, disponibiliza 260 funções, além dos diversos módulos, desenvolvidos pela comunidade e que podem ser obtidos através do seu gerenciador de pacotes (CPAN), além dos diversos paradigmas.

##### 3.1.2. Simplicidade: A linguagem possibilita muitas maneiras de realizar uma mesma operação?

Devido a existência de várias estruturas básicas, onde algumas possuem funcionalidade e sentido similares, é possível realizar uma operação de diversas maneiras. O código da figura\ref{fig:1} exemplifica as  formas possíveis de realizar a chamada de um método, considerando a abordagem orientada à objetos:

##### 3.1.3. Simplicidade: Os operadores da linguagem possuem mais de um significado?

Sem a utilização do módulo warnings é possível realizar operações entre números e textos sem receber mensagem de erros ou gerar algum tipo de interrupção, tendo como retorno um valor numérico, entretanto não é algo aconselhado. Ao utilizar o módulo de avisos ou o modo -w (warnings) no terminal, será informado uma mensagem de erro e o fluxo do programa sera quebrado. O código da \ref{fig:2} exemplifica essa situação.

##### 3.1.4. Ortogonalidade: A linguagem possui muitas exceções às suas regras?

Em Perl existem muitas construções básicas e as mesmas podem ser combinadas de diversas maneiras fazendo com que seja reduzida a ortogonalidade da linguagem. Por exemplo a utilização da cerquilha, que a depender de sua posição, representa um trecho de comentário ou o último elemento de uma lista.

É possível encontrar outro exemplo ao se utilizar tipos de dados mais complexos, onde essas estrutura podem ser construídas usando referências, que permitem construir listas e hashes dentro de listas e hashes, entretanto essa referência é um valor escalar e pode se referir a qualquer outro tipo de dado Perl. A \ref{fig:3} apresenta um exemplo retirado da documentação oficial da linguagem:

##### 3.1.5. Instruções de Controle: A linguagem possui suporte a controle de fluxo (goto)?

Em Perl é possível realizar o controle de fluxo de três formas, sendo elas listadas a seguir:

* A primeiro: forma faz com que o ponto de execução atual salte para o ponto referido com um LABEL (rótulo). Um goto neste formato não pode ser usado afim de pular para um loop ou função externa. É possível apenas, pular para um ponto dentro do mesmo escopo.
* A segunda forma: espera que uma EXPR (expressão) avalie um LABEL (rótulo) reconhecível. Nessa forma são utilizada expressões ou funções condicionais para controlar a execução de um programa.
* A terceira forma: substitui uma chamada para uma sub-rotina nomeada, para uma sub-rotina em execução. A nova sub rotina herdará a pilha de argumentos e outros recursos da sub-rotina original.

Figura 4. Utilização do goto.

##### 3.1.6. Tipos de dados: A linguagem fornece tipos de dados primitivos suficientes?

Exitem apenas 3 categorias de dados, como mostra a 5: scalares(Strings, Inteiros eNúmeros Racionais),arrays e hashes; Não há nenhum tipo de dado booleano, mas simum conjunto de valores considerados como falsos, sendo eles: 0, ’0’, ”, (), undef e valoresverdadeiros precedidos do simbolo de !.Para criação de registros e estruturas mais complexas é pode ser utilizado omódulo Struct, além da criação por referência como foi visto na seção sobre ortogona-lidade.Figura 5. Tipos de dados disponíveis.

##### 3.1.7. Projeto de sintaxe: Prove um tamanho de identificadores suficiente?

Identificadores possuem no máximo 251 caracteres contendo letras, dígitos, sublinhadosou a sequência especial :: ou ?.

##### 3.1.8. Projeto de sintaxe: Possibilita a utilização de palavras especiais como nome de variáveis?

Cada tipo categoria de dados possui um caractere identificador ’$’ para escalares, ’’ paraarrays e ’#’ para hashs, impossibilitando a utilização de palavras especiais. A 6 apresentauma tentativa de sobrecarga da função ’print’.

##### 3.1.9. Projeto de sintaxe: As sentenças indicam, parcialmente, seu propósito?

As instruções de controle possui significado e estrutura bem explicitas, como por exem-plo a utilização da instrução given (swithc em outras linguagem). Que segue a estruturalógica: dada tal informação (given), quando essa informação (when) satisfazer determi-nada condição realizar determinada operação.

Figura 6. Impossibilidade na criac¸ ão de vari áveis com palavras especiais

#### 3.2. Facilidade de Escrita

##### 3.2.1. Épossível abstrair a complexidade dos processos e dos dados?

É possível definir blocos de instruções utilizando colchetes, definir sub-rotinas e estruturasde dados complexas e módulos. Na linguagem Python a definição de blocos de instruçõesé realizada através de edentação, segundo o Guia de Estilo para o Código Python. Esseestilo de organização pode gerar confusão na utilização de tabulação e espaço para definiros blocos. [Borges 2014]

##### 3.2.2. Épossível se expressar de maneira elegante (sem muitas linhas de código)?

É uma linguagem multi paradigma, ou seja, você pode escrever código Perl de diferentes maneiras, lembrando linguagens imperativas, linguagens funcionais ou linguagens orientadas a objeto. A \ref{fig:7} apresenta um exemplo dessa situação. Python também é uma linguagem muito expressiva, onde é possível criar instruções de maneira muito compacta através da função lambda, que nada mais é que uma função anônima.

#### 3.3. Confiabilidade

##### 3.3.1. Verifica erros de tipo de dados no programa por meio do compilador ou durante a execução do programa?

Perl possui tipagem dinâmica, ou seja, o tipo ao qual a variável está associada pode variar durante a execução do programa \cite{reis2004} e ao passar os parâmetros de uma sub-rotina, por padrão, Perl agrupa todos os parâmetros em uma única lista, assim ignorando a verificação de erros relacionados ao tipos de dados.

##### 3.3.2. É capaz de intercepta erros em tempo de execução?

Apesar de prover recursos nativos para tratamento de exceções, sua estrutura não é muito intuitiva. Para utilizar a estrutura try e catch, padrão em outras linguagens é necessário utilizar um módulo específico, como o Try::Tiny.

##### 3.3.3. A utilização de apelidos é restrita?

Uma referência (apelido) Perl é um tipo de dado considerado escalar que mantém a localização de outro valor que pode ser escalar, matrizes ou hashes. Com esse tipo de dado é possível construir listas contendo outras listas, que podem conter referências a hashes e assim por diante. É assim que as estruturas de dados aninhadas são construídas em Perl. A seguir na \ref{fig:9} é demonstrada a utilização deste recurso.

#### 4. Conclusão

Ao realizar os questionamentos da analise desenvolvida, é possível perceber a utilização de vários recursos presentes em outras linguagens, entretanto Perl possui algumas instruções que realizam tarefas muito similares de maneira que possivelmente poderiam ser abstraídas da linguagem. Outra característica que acaba por dificultar a escrita, são as formas especificas de representação para cada categoria de tipo de dado (escalares, arrays e hashs).

  Perl pode ser considerada multi-paradigma, ou seja, possibilita escrever códigos imperativos, funcionais ou orientado a objetos, entretanto sua abordagem orientada a objetos não  fornece recursos suficientes para o desenvolvimento de sistemas mais robustos, pois abstrai conceitos mais avançados de orientação a objetos. Esse incapacidade é até compreensível, pois existe uma grande quantidade de instruções básicas.

  Assim, é possível concluir que apesar das qualidades e facilidades oferecidas, o exagero de instruções e funcionalidades acaba por confundir seus usuário. Em sua versão 6, a mais atual, é possível notar que existe uma melhora no que se diz respeito a orientação a objetos, trazendo conceitos mais sofisticados já existentes em outras linguagens.

#### Figuras

Figura 1Figura 2Figura 4Figura 3Figura 5Figura 6Figura 7Figura 8Figura 9
#### Referências

* Amorim, N. (2013). Entendendo python: Lambda.
* Borges, L. E. (2014). Python para Desenvolvedores: Aborda Python 3.3. Novatec Editora.
* Conzens, S. and Wainwright, P. (2000). BEGINNING Perl. Wrox Press.
* Gortado, R. A. (2015). Linguagem de programação. Rio de Janeiro: Seses.
* Gudwin, R. R. (1997). Linguagens de programação. Campinas: DCA/FEEC/UNICAMP, page 24. London, G. (2010). Impatient Perl. Cover Art.
* Reis, C. R. (2004). Python na prática: Um curso objetivo de programaç ao em python.
* Sebesta, R. W. (2018). Conceitos de Linguagens de Programação-11. Bookman Editora.