O Perl 6 é a mais recente versão da linguagem Perl. Ao contrário do que é habitual, introduzir apenas alguns melhoramentos em termos de eficiência, correcção de erros, e adição de módulos, o salto entre o Perl 5 e o Perl 6 é tão grande que o Perl 6 deve ser considerada uma nova linguagem, completamente diferente da anterior, apenas com alguma sintaxe herdada do Perl 5.
Algumas das grandes diferenças para esta nova versão são a grande inovação semântica e a perda de compatibilidade com os programas escritos em Perl 5.
O Perl 6 tem uma sintaxe que é bastante parecida com a do Perl 5. Cada instrução/comando deve terminar com um ponto e vírgula (;
). Por exemplo:
say "Hello World";
Outra semelhança com o Perl 5, ou com outras linguagens de scripting, é o facto de usar o cardinal (#
) para indicar que determinada linha é um comentário. Todas as linhas que iniciem por este caracter são ignoradas. Do mesmo modo, se um cardinal aparecer no meio de uma linha, todo o resto da linha é considerado comentário.
Todos os programas Perl 6 devem iniciar com a linha:
use v6;
Esta linha é especialmente útil porque permitirá que qualquer utilizador receba uma mensagem de erro clara se tentar executar o programa com uma versão de Perl 5.
Em Perl 6 existem os seguintes tipos de variáveis:
Os nomes ou identificadores das variáveis devem seguir as regras habituais para a definição de identificadores em linguagens de programação:
_
);-
) e do apóstrofe (
') no meio do identificador.Os seguintes são identificadores válidos:
$id $x360 $this-is-a-valid-identifier $yet'another-valid-identifier
Note que para além das regras definidas, os identificadores apresentados começam com um dolar ($
). Este caracter, chamado na gíria Perl de sigil, identifica o tipo de dados a que o identificador se refere.
As variáveis escalares podem ser usadas para ….
> my $scalar = 'hello'; say $scalar; hello
> my $scalar = 13; say $scalar; 13
Em Perl 6 as variáveis escalares…..
> 'hello world'.say hello world
> 13.say 13
As listas são outro tipo …
> my @week = ('Mon','Tue','Wed','Thu','Fri');
Outra hipótese seria …
> my @week = 'Mon','Tue','Wed','Thu','Fri'; @week.perl ["Mon", "Tue", "Wed", "Thu", "Fri"]
Ou ainda …
> my @week = <Mon Tue Wed Thu Fri>; @week.perl ["Mon", "Tue", "Wed", "Thu", "Fri"]
Aceder através do índice …
> my @week = ('Mon','Tue','Wed','Thu','Fri'); @week[0].say; Mon > my @week = ('Mon','Tue','Wed','Thu','Fri'); @week[2].say; Wed
De notar que o @ mantém-se …
Interpolação de valores de um array, por exemplo
> say "Week days are: @week" Week days are: @week > say "@week[0] is the first day of the week." Mon is the first day of the week. > say "Week days are: @week[]" Week days are: Mon Tue Wed Thu Fri
Outra maneira …
Este tipo de ….
> my %h = (1=>'one', 2=>'two', 3=>'three'); %h.perl {"1" => "one", "2" => "two", "3" => "three"}
Aceeso através da chave …
> %h{1}.say one
Operadores podem ser considerados …, mais comuns:
> my $string = 'hello world';
> $file.lines
> my @list = 1,2,3,4,5; @list.perl [1, 2, 3, 4, 5]
> my $pair = 'color' => 'black'; say $pair.key; say $pair.value; color black
> say 'Perl' ~ ' ' ~ '6'; Perl 6
> say 1 max 2; 2 > say 1 max 2 max 3; 3
> [max] 1,2,3; 3 > [+] 1,2,3; 6
> say '#' x 5; #####
> 'a' eq 'a' ?? say 'equals' !! say 'not equals'; equals > 'a' eq 'b' ?? say 'equals' !! say 'not equals'; not equals
> sub func() { ... }
> say 2+3; 5 > say 3-2; 1 > say 4/2; 2
Funções são usadas para ..
Um exemplo da definição de uma função pode ser
sub hello() { say 'hello world'; }
Mais tarde …
> hello(); hello world
As funções em Perl 6 podem ter uma assinatura que define os valores que são passados como argumentos quado é feita uma chamada à função. No seu modo mais simples os argumentos da função são definidos como uma lista de variáveis separados por vírgulas. Por exemplo,
sub contacto($nome, $morada) { ... }
Neste exemplo específico a assinatura da função diz-nos que esta função recebe dois argumentos, e que o primeiro argumento vai estar disponível no contexto da função na variável $nome e o segundo na variável $morada.
É necessário que por omissão os valores passados a uma função são apenas de leitura, o que signifca que podem ser usados no bloco da função mas não podem ser alterados. Este comportamente pode ser alterado recorrendo a algumas opções. Por exemplo:
sub contacto($nome, $morada is rw) { ... }
A palavra chave is permite modificar o comportamento das variáveis passadas quando a função é chamada. Neste caso específico estamos a indicar que a variável $morada é também de escrita. De notar que como é feito o XXXbound das variáveis, se o conteúdo da variável $morada for alterado dentro do bloco da função esta alteração vai se reflectir fora do contexto da função. Por exemplo:
sub contacto($nome, $morada is rw) { $morada = 'hidden'; } my $nome = 'John'; my $morada = 'Home'; contacto($nome, $morada); say $morada; # imprime hidden
Se pretendermos alterar a variável dentro do bloco da função, mas que esta alteração não seja reflectida fora do contexto da função podemos usar a opção copy na assinatura, assim sendo:
sub contacto($nome, $morada is copy) { $morada = 'temp'; } my $nome = 'John'; my $morada = 'Home'; contacto($nome, $morada); say $morada; # imprime Home
> print "hello world"; hello world>
> print "hello world\n";
hello world
> say 'Hello world'; Hello world