Larry Wall, criador do Perl e cocriador do Parrot, declarou que a versão 6 de Perl não será compatível com as versões anteriores.Realmente dei uma olhada no Perl6 e está muito diferente… só que para melhor. =)
A única coisa de que não gostei foram das mudanças em expressões regulares, no mais as mudanças só acrescentam.
Tipagem
Uma das maiores reclamações que os programadores fazem de Perl é sua tipagem insanamente fraca, apenas três tipos: escalar (
$scalar), vetor (@array) e vetor associativo (%hash).Perl6 traz o suporte a tipos! Pelo que vi na documentação, há seis tipos novos: inteiro (
int), ponto flutuante (num), string (str), booleano (bool), bit (bit) e referência (ref), de forma estática:my int $foo = 5;
my str $bar = "foo";
my num $baz = 5.3;
my bool $foobar = 1;Conversão:
print str 5;
print scalar @list;Passagem de parâmetros
Em Perl a passagem de parâmetros sempre foi por cópia, agora passa a ser por referência, exceto para tipos primitivos.
No caso de atribuição de referência de tipos primitivos, em vez do tradicional:
my $b = \$a;Passa a ser:
my $b := $a;Mudanças em vetores
A criação de vetor passa a suportar um formato mais simples.
Temos o tradicional:
my @fruits = ("apple", "pear", "banana");Que passa a ser:
my @fruits = "apple", "pear", "banana";E a lista:
my @fruits = qw/apple pear banana/;Passa a ser:
my @fruits = <apple pear banana>;Em Perl5, para se obter um item de um vetor, o primeiro carácter mudava de
@ para $: $fruits[0]. Agora, em Perl6, não há mais alteração: @fruits[0].A quantidade de elementos de um vetor era dada por:
my $count = $#fruits + 1;Agora, em Perl6 passa a ser:
my int $count = @fruits.elems;Repara que o famigerado
-> virou um simples ponto!Também para obter o último elemento do vetor, que era:
my $last = $fruit[$#fruit];Passa a ser:
my $last = @fruit[@fruit.end];Ou ainda:
my $last = @fruit[*-1];Para se obter um vetor em um contexto string, Perl6 oferece o atalho
~. Para numérico + e para booleano ?:my str $str_fruits = ~@fruits;
my num $num_fruits = +@fruits;
my bool $bool_fruits = ?@fruits;Tratamento de exceções
Em Perl5 era usado
eval para avaliar um bloco com possível exceção e $@ recebia os dados de exceção:eval {
…
};
if ($@) {
warn "exception: $@";
}Perl6 passa a usar
try-CATCH:try {
…
CATCH {
warn "exception: $!";
}
}Repare que a mensagem de exceção passa a ser capturada em
$! e o bloco CATCH fica dentro do bloco try.Repetições
Não há uma forma menos dolorosa de dizer isso:
foreach vira for, que também passa a suportar algumas construções de while, for vira loop, que também passa a suportar algumas construções de while.Então:
foreach (@fruits) {Vira:
for @fruits {E:
foreach my $fruit (@fruits) {Vira:
for @fruits -> $fruit {Agora, olha o
while aí:while (my($age, $sex, $location) = splice @whatever, 0, 3) {Vira:
for @whatever -> $age, $sex, $location {Contando até dez em Perl5:
for (my $i = 1; $i <=10; $i++) {
print "$i\n";
}Contando até dez em Perl6:
loop (my $i = 1; $i <=10; $i++) {
say $i;
}E
loop { … } funciona como while (1) { … }.Vetor associativo
Sofre alterações parecidas com as de vetor.
Por exemplo, em Perl5:
my $c = $days{February};Em Perl6 vira:
my int $c = %days{'February'};Ou ainda:
my int $c = %days<February>;Alguns métodos
Para se obter o tamanho de uma string em Perl5:
my $len = length $string;Em Perl6 fica:
my int $len = $string.chars;Para exibir um vetor de modo ordenado em Perl5:
print sort(@fruits);Em Perl6:
say @array.sort;Ou ainda:
@array.sort.print;Variáveis de sistema
Para se obter o valor da variável
HOME em Perl5:print $ENV{HOME};Em Perl6 passa a ser:
print %*ENV<HOME>;Ou ainda:
print $+HOME;Orientação a objetos
Criar uma classe em Perl5 era uma aventura!
Você criava um pacote (
package) e «abençoava» um escalar com o pacote… pronto: aí tinha uma instância cuja classe era o pacote.Um tremendo bacalhau.
Em Perl6 temos as palavras reservadas
class, has (para atributos) e method (para métodos), para criar classes reais.Métodos privados precisam começar com
!, por exemplo, $!age, e métodos públicos precisam começar com ., como por exemplo $.name.A passagem de parâmetros também mudou. Além de ser por referência, como citado, passa a suportar parâmetros nominais e parâmetros excedentes – como
*args de Python, mas com a sintaxe *@args.Se o argumento for mutável precisa ser seguido de
is rw.O que era:
package Square;
@ISA = qw/ Rectangle /;Passa a ser:
class Square is Rectangle {E o que era:
my $rect = new Rectangle(4, 5);Passa a ser:
my Rectangle $rect .= new(4, 5);Conclusão
Há muito mais! Consulte a página Perl6::Perl5::Differences, mas o que já sabemos é: quem trabalha com Perl vai precisar aprender de novo!
[]'s
Cacilhas, La Batalema

11 comentários:
Bacana! Conheço pouco de Perl, mas pelo post vejo que vai ficar bem melhor, e bem consistente.
Só falta PHP melhorar agora ! -> é feio demais!
É…
-> vem de C++ e, pelo que entendi, era pra ser →, mas como não é um carácter ASCII, foi usada uma representação ASCII – assim como o ^ de Smalltalk, que deveria ser ↑.
Mas realmente -> é feio demais!
[]'s
Cacilhas, La Batalema
Python 3 já saiu, senhores! Ela não parece tão diferente da linha 2. O que acham?
Pelo que vi de Python 3000, está bem menos diferente de Python 2.x do que Perl6 de Perl5.
[]'s
Cacilhas, La Batalema
Meldels... ter classes em Perl é excelente mas instanciar um novo tipo ficou um tanto estranho... sem falar que $+HOME é de dar medo :)
Hheheh, esse Perl 6 está demorando tanto que GvR declarou que não desejava que a mudança de Python 3 fosse tão radical que chegasse a se tornar um Perl 6. Se o GvR tivesse atendido ao anseio da galera de retirar a obrigatoriedade da 'self' na definição de um método, talvez Python 3 tivesse de fato se tornado um Perl 6 heheeh.
Perl pra mim sempre foi aquela história de "não li mas não gostei".
Pra que esse negócio chato de moderação de comentário?
Bem Eduardo,
Eu sei que moderação é uma apurrinhação pra quem escreve o comentário, mas acredite: uma apurrinhação maior ainda pra mim, que fico moderando essa jossa. =(
No começo eu deixava sem moderação mesmo, mas tem muita gente que escreve comentário apenas para desinformar e criar confusão, e aí a apurrinhação pra todo mundo é ainda maior do que a sua de esperar eu autorizar e a do que a minha de ficar moderando.
Por favor, não nos leve a mal. ;-)
[]'s
Cacilhas, La Batalema
Só uma coisinha: foreach sempre foi sinônimo de for em Perl5
Interessante…
Aprendi foreach e nunca pensei em usar for para a mesma finalidade.
E funciona!
Só mais uma coisa: quando for postar um comentário, por favor identifique-se.
[]'s
Cacilhas, La Batalema
Postar um comentário