[Triangulo-pm] [Perl 5.10] o operador "default"

Lucas Mateus lucasmateus.oliveira em gmail.com
Quarta Novembro 21 18:03:06 PST 2007


Outra grande importacia seria se o HASH %- gravasse os valores das RegExp
recursivas como por exemplo separar numeros e palavras:

$var =~ /(?<numeros>\d+)(?<palavras\w+)/g;

print @{$-{numeros}};
print @{$-{palavras}};

Infelismente isso nao acontece, quando vi que o valor da chave par o HASH %-
era uma referencia de ARRAY eu cheguei a pensar que funcionasse assim :-)
mas nao funciona.



Em 19/11/07, Lucas Mateus <lucasmateus.oliveira em gmail.com> escreveu:
>
> Acho que esse definede-or "//" vai causar confusão ao menos no começo.
>
> my $var = 0;
>
> $var //= 1;
> print $var;  # resultado 0
>
> $var ||= 1;
> print $var; # resultado 1
>
>
>
>
> my $var;
> $var //= 1;
> print $var;  # resultado 1
>
> $var ||= 1;
> print $var; # resultado 1
>
>
>
>
>
> Em 19/11/07, Lucas Mateus <lucasmateus.oliveira em gmail.com > escreveu:
> >
> > E agora teremos SWITCH
> >
> >  given ($foo) {
> >         when (/^abc/) { $abc = 1; }
> >
> >         when (/^def/) { $def = 1; }
> >         when (/^xyz/) { $xyz = 1; }
> >         default { $nothing = 1; }
> >
> >     }
> >
> >
> >
> > Algumas mudanças com RegExp recursiva: nasce dois novos HASHES %+ e %-
> >
> >
> >
> > Em 19/11/07, Lucas Mateus < lucasmateus.oliveira em gmail.com> escreveu:
> > >
> > > Grato cara, vo esparramar essa informação aki =) mais uma vez obrigado
> > > !!!
> > >
> > >
> > >
> > > Em 19/11/07, Adriano Ferreira < a.r.ferreira em gmail.com> escreveu:
> > > >
> > > > 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'.
> > > >
> > > > ----
> > > >
> > > > Peço aos assinantes desta lista que divulguem esta lista. Ela pode
> > > > (e
> > > > deve) se tornar um lugar para trocar experiências sobre a linguagem
> > > > Perl e a programação com ela. A audiência a ser atingida é tão
> > > > variada
> > > > quanto se puder pensar: quem é curioso com programação, quem está
> > > > iniciando com Perl, quem já sabe muito e quer compartilhar. Todos
> > > > são
> > > > bem vindos. Eu gostaria muito também que a participação de quem mora
> > > > no Triângulo Mineiro aumentasse e formássemos um grupo interessado e
> > > >
> > > > familiarizado com a linguagem Perl (que é ótima para fazer o que
> > > > você
> > > > precisa -- e se chegarem perto o bastante para ver, verão que não é
> > > > só
> > > > propaganda).
> > > >
> > > > Saudações,
> > > > Adriano Ferreira
> > > > _______________________________________________
> > > > Triangulo-pm mailing list
> > > > Triangulo-pm em pm.org
> > > > http://mail.pm.org/mailman/listinfo/triangulo-pm
> > > > http://mail.pm.org/pipermail/triangulo-pm/
> > > >
> > >
> > >
> >
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: http://mail.pm.org/pipermail/triangulo-pm/attachments/20071121/3b38987f/attachment.html 


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