[SP-pm] Novidade Perl 5.10

Lucas Mateus lucasmateus.oliveira em gmail.com
Segunda Novembro 19 16:58:57 PST 2007


Desconsiderem, eh realmente necessario importar "use features 'switch'" :-(
quanto ao operador defined-or "//" achei de certa forma interessante acho
que pode causar uma certa confusão e devera ser usado com cautela pra manter
concistencia.

EXEMPLO 1

my $var = 0;  # $var definido

$var //= 1;
print $var;  # resultado 0

$var ||= 1;
print $var;  # resultado 1



EXEMPLO 2

my $var;    # $var nao definido

$var //= 1;
print $var;  # resultado 1

$var ||= 1;
print $var;  # resultado 1


RegExp

Nasce dois HASHES ESPECIAIS (%+ e %-)  e dois ARRAYS ESPECIAIS (@+ e @-)
utilizados para Expressoes Regulares, entre outras novidades para RegExp.

$var = 'linguagem perl 510';

$var =~ /(\d+)/;
print $1;  # resultado 510

$var =~ /(?<numero>\d+)/;
print $+{numero};     # resultado 510
print @{$-{numero}} # resultado 510

## Codigo dentro de RegExp
$var =~ /(\d+)(?{print $^N})/;  # resultdado 510




Funcao say

Nova funcao similar ao print a diferença é que ela ja embute um NEWLINE no
final da linha.

use features 'say';

print $var."\n";
# o mesmo que
say $var;


Em 19/11/07, Lucas Mateus <lucasmateus.oliveira em gmail.com> escreveu:
>
> Agora teremos SWITCH sem importação de classe.
>
>
> given ($foo) {
>         when (/^abc/) { $abc = 1; }
>         when (/^def/) { $def = 1; }
>         when (/^xyz/) { $xyz = 1; }
>         default { $nothing = 1; }
>
>     }
>
>
>
> ---------- Forwarded message ----------
> From: Lucas Mateus <lucasmateus.oliveira em gmail.com >
> Date: 19/11/2007 11:29
> Subject: Novidade Perl 5.10
> To: saopaulo-pm em mail.pm.org
>
> Entre as novidades do Perl 5.10 (cujo release candidate 1 chegou ao
> CPAN neste sábado -
> http://search.cpan.org/~rgarcia/perl-5.10.0-RC1/<http://search.cpan.org/%7Ergarcia/perl-5.10.0-RC1/>),
> temos um novo
> operador. É o operador '//' conhecido como operador 'default' ou
> 'defined-or'.
>
> O propósito deste operador é muito similar ao operador '||' (que
> corresponde a um OU) com algumas diferenças sutis e úteis.
>
> O operador '||' é avaliado assim
>
> exp1 || exp2 = exp1,    se o resultado da exp1 é verdadeiro
> exp1 || exp2 = exp2,    caso contrário
>
> Como este operador existe há muito tempo no Perl é muito comum que ele
> seja usado quando é desejável que uma expressão tenha um certo valor
> (ou 'default') se ele não for especificado explicitamente.
>
> Por exemplo,
>
> sub rule {
>       my $n = $_[0];
>       my $char = $_[1] || '-';
>       return $char x $n;
> }
>
> constrói uma régua de $n caracteres com o caracter especificado ou '-'.
>
> Assim,
>
> rule(3)      retorna      '---'
> rule(4,'+')  retorna     '++++'
>
> No entanto,
>
> rule(5, 0)    retorna   '-----'
>
> porque 0 é *falso* (assim como os outros valores de falso: '' - o
> string vazio, 0 - zero inteiro, 0.0 - zero em ponto flutuante, undef).
>
> Antes, a solução era trocar a expressão simples " $_[1] || '-' " por
> um mais complicada e precisa:
>
>    my $char = defined $_[1] ? $_[1] || '-'; # atenção ao jogo para
> evitar os efeitos colaterais do shift
>
> Mas a semântica do operador '//' é exatamente esta:
>
> exp1 || exp2 = exp1,    se o resultado da exp1 é definido (não é 'undef')
> exp1 || exp2 = exp2,    caso contrário
>
> Então a expressão corrigida fica mais concisa e elegante:
>
>    my $char = $_[1] // '-';
>
> Assim, para inúmeras aplicações que antes empregariam o '||' com o
> temor de que outros valores de falso levassem a surpresas, a melhor
> alternativa é agora o uso do 'defined-or'.
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: http://mail.pm.org/pipermail/saopaulo-pm/attachments/20071119/16a30770/attachment.html 


Mais detalhes sobre a lista de discussão SaoPaulo-pm