Perl

Grupo:

  1. Pablo Tyszkievicz Kila
  2. Lucas Mendonça de Souza Xavier
  3. Italo Dombrowski Machado

História

Criada por Larry Wall em dezembro de 1987, seu objetivo primário era processamento de textos, é baseada no AWK, C, C++, Lisp, Pascal, sed, Smalltalk e o shell scripting(especialmente o do Unix). Foi originalmente chamada de “Pearl”, pois Wall queria um nome curto que tivesse conotações positivas. Após descobrir que outra linguagem já registrada possuía esse nome trocou-o para ‘Perl’. O camêlo embora considerado como o simbolo do linguagem não o é oficialmente, ele adquiriu tal nomeação devido ter sido utilizado como capa no primeiro livro da linguagem o “Programming Perl” publicado pela O'Reilly Media.

Características

Perl 5 não possui uma definição formal. Existe, contudo, um único interpretador, que é mantido pela comunidade e padroniza a linguagem. Já Perl 6 nasceu de uma definição, que é seguida pelos múltiplos grupos que o implementam.

  • É uma linguagem interpretada, o que a que torna altamente portável para vários sistemas. A execução de um programa comum é feita em duas fases: na primeira, o código é transformado em uma árvore de análise sintática e otimizado(“fase do compilador”); na segunda (“interpretação”), as instruções da árvore gerada são executadas.
  • Possui tipagem dinâmica (não é necessário declarar o tipo da variável).
  • Gerenciamento automático de memória.
  • Apesar de suas estruturas serem típicas da programação procedural, suporta programação orientada a objetos e funcional.
  • Forte suporte a expressões regulares.
  • Linguagem atualmente open-source(não completamente, na verdade). É distribuída sob a licença GNU/GPL e sob uma licença própria denominada “Artistic License”.
  • Grande diversidade de módulos (bibliotecas); A comunidade mantém um arquivo de bibliotecas (cpan.perl.org) com dezenas de milhares de módulos disponíveis para os usuários. Também é possível importar código C ou C++ através de interfaces específicas, como o XS e o SWIG. Exemplo de módulo é o DBI, que possibilita a integração com diferentes bancos de dados - como MySQL, Oracle e Postgres - através de uma interface comum.
  • Possui várias ferramentas de processamento de texto, tornando-a ideal para trabalhar com linguagens de marcação, explicando seu sucesso no desenvolvimento para web; adicionalmente, softwares como o Catalyst e recursos como a integração com Apache e bancos de dados colaboram para esse êxito.
  • É considerada uma linguagem estável e madura; um estudo da companhia Coverity apontou que, em 2006, o código de Perl tinha um número de erros abaixo da média - e mesmo do desvio padrão - quando comparado com outros projetos open-source populares (a densidade de defeitos de Perl, segundo os testes, foi de 0,186 erros por mil linhas de código, contra 0,372 de Python, 0,474 de PHP, 0,202 do GCC e 0,355 do navegador Firefox da época). A mesma empresa certificou o projeto Perl como livre de erros de segurança em 2008, junto com ferramentas open-source como PHP, Postfix e Python.

Utilização

Juntamente com Python e PHP, Perl é uma linguagem amplamente utilizada no contexto do desenvolvimento web. Sua aplicação mais popular é, possivelmente, a criação de scripts CGI, função para a qual é empregada desde o início da web.

São exemplos de sites criados totalmente em Perl são Bugzilla, CPanel, TWiki e Movable Type. Grandes projetos que fazem uso extensivo da linguagem são o as páginas da Amazon, da BBC britânica e do IMDb, além dos sites Priceline.com, Craigslist e Slashdot.

Versões principais

O site oficial considera Perl uma família de linguagens; Perl 6, a nova versão em desenvolvimento, por exemplo, é considerada uma linguagem totalmente separada da atual Perl 5. As equipes por trás delas são independentes e o desenvolvimento de uma não tem, a princípio, impacto sobre a outra.

  • 1.0 (1987) - Introduziu a nova linguagem;
  • 2.0 (1988) - Introdução de um sistema de tratamento de expressões regulares (padrões em cadeias de carácteres, exemplos substituição de texto/código em editores, realce de sintaxe, entre outros);
  • 3.0 (1989) - Adicionado suporte a streams binárias;
  • 4.0 (1993) - Versão de manutenção;
  • 5.0 (1994) – O interpretador foi quase que totalmente reescrito, adicionada a orientação a objetos, variáveis locais(limitadas ao uso de uma função por exemplo) e introdução dos módulos(bibliotecas).

Exemplos de códigos

Hello World

use strict;	#opcional (boa prática de programação)
use warnings;	#opcional (boa prática de programação)
 
print “Hello World”;

Bubble Sort

#bubble sort, implementação do site www.perltutorial.org
#linhas de comentário começam com #
 
use strict;		#opcional; exige que as variáveis sejam declaradas
			#com o intuito de minimizar erros
use warnings;		#opcional; faz com que sejam mostrados, além de erros, alertas
 
#Essa seria a subrotina para fazer bubblesort colocando palavras em ordem alfabética
sub bubblesort {
	my $array = shift;	#passa o primeiro argumento para $array
 
			# $ indica uma variável 'escalar'
			# que se opõe a @ (arranjo) e % (hash)
			# $array é escalar porque é uma referencia para um arranjo
	my $i;		# O índice inicial
	my $j;		# O índice corrente
	my $ncomp = 0;	# O número de comparações
	my $nswap = 0;	# O número de trocas
 
	for ( $i = $#$array; $i; $i-- ) {
		for ($j = 1; $j <= $i; $j++ ) {
			$ncomp++;
			#troca se necessário
			if ( $array ->[ $j - 1 ] gt $array->[ $j ] ) {	# gt serve
									# para comparar strings
	# o operador -> serve para acessar membros de arranjos apontados por referencias
				@$array[ $j, $j - 1 ] = @$array[ $j - 1, $j ];
				$nswap++;
			}
		}
	}
	print "bubblesort: ", scalar @$array, " elementos, $ncomp comparações, $nswap trocas\n";
	# $ncomp e $nswap não precisam estar separados por vírgulas porque
	# algumas instruções são processadas dentro de aspas duplas (")
}

Expressões regulares

$temp = 'house';
$teste = 'pato';
 
#Imprime uma mensagem se World está na expressão dada
print "Existe correspondência de expressões\n" if "Hello World" =~ /World/;
#Variáveis podem ser usadas
print "(2) também corresponde\n" if 'cathouse' =~ /cat$temp/;
#Imprime uma mensagem se não houver correspondência
print "(3) não corresponde\n" unless 'housecat' =~ /${temp}cat/;
#No início da sentença
print "Positivo em (4)\n" if 'Isto é um teste' =~ /^Isto/;
#Aceita "gato", "rato" ou "pato"
print "Correspondência em (5)\n" if $teste =~ /[gpr]ato/;
#Extrai o horário no formato hh:mm de uma string para uma variável
#\d significa dígito e $1 e $2 são variáveis padrão
$hora =~ / (\d\d):(\d\d)/;
$horas = $1;
$minutos = $2;
#Substitui 'pato' por 'gato'
$teste =~ s/p/g/;
#Acusa positivo se entre 2 e 5 ocorrências de 'a' forem encontradas
print "Positivo.\n" if $teste =~ /a{2,4}/;

Fontes e links

Sobre a linguagem

Artigos e notícias

Programação em Perl

 
perl-1-trabalho.txt · Last modified: 2012/03/18 23:17 by clp · [Old revisions]