User Tools

Site Tools


perl:perl_6

Perl 6

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.

Introdução

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.

Variáveis

Em Perl 6 existem os seguintes tipos de variáveis:

  • escalares servem para armazenar valores atómicos;
  • listas permitem armazenar elementos de qualquer tipo;
  • tabelas associativas associam valores a determinadas chaves;

Os nomes ou identificadores das variáveis devem seguir as regras habituais para a definição de identificadores em linguagens de programação:

  • devem começar por uma letra ou pelo caracter sublinhado (_);
  • os restantes caracteres, para além de letras e dos caracter sublinhado, podem conter dígitos;
  • é possível o uso do hífen (-) 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.

Escalares

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

Listas

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 …

Tabelas Associativas

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

Operadores podem ser considerados …, mais comuns:

  • atribuição (=): a atribuição é utilizada ….
> my $string = 'hello world';
  • o operador . deixou de …
> $file.lines
  • operador para construír listas (,)
> my @list = 1,2,3,4,5; @list.perl
[1, 2, 3, 4, 5]
  • operador para criar pares chave/valor (⇒)
> my $pair = 'color' => 'black'; say $pair.key; say  $pair.value;
color
black
  • concatenação de strings (~)
> say 'Perl' ~ ' ' ~ '6';
Perl 6
  • o operador max
> say 1 max 2;
2
> say 1 max 2 max 3;
3
  • o operador []
> [max] 1,2,3;
3
> [+] 1,2,3;
6
  • operador de repetição x
> say '#' x 5;
#####
  • o operador ternário (?? !!): este operador …
> 'a' eq 'a' ?? say 'equals' !! say 'not equals';
equals
> 'a' eq 'b' ?? say 'equals' !! say 'not equals';
not equals
  • o operador yada yada é utilizado…
> sub func() { ... }
  • o operador »

Operadores Aritmétricos

  • operações aritmétricas comunus: +. - , / …
> say 2+3;
5
> say 3-2;
1
> say 4/2;
2

Funções

Funções são usadas para ..

Definição

Um exemplo da definição de uma função pode ser

sub hello() {
  say 'hello world';
}

Mais tarde …

> hello();
hello world

Funções Anónimas

Assinatura de Funções

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

Métodos

Objectos

Módulos

"Core Functions"

  • print: esta função serve para …
> print "hello world";
hello world>
> print "hello world\n";

hello world

  • say: esta função …
> say 'Hello world';
Hello world

"Expressões Regulares"

Gramáticas

Multi Method Dispatch

perl/perl_6.txt · Last modified: 2010/08/10 23:52 by smash