Nicole
o when usa smart matching ~~
E a vantagem é um codigo enxuto.
Por exemplo, isto
if($type ~~ /^[FUP]$/) { code }
elsif($type ~~ "S") { code }
elsif($type ~~ "B") { code }
else { code }
vira isto
given ($type){
when(/^[FUP]$/) { code }
when("S") { code }
when("B") { code }
default { code }
}
a vantagem é que a variavel $type foi usada apenas uma vez. eu não tenho
muito espaço para repeti-la
por outro lado isto não é um switch/case como em C que vc precisa adicionar
um break senão ele cai em todas as condições abaixo - e isso tem algumas
utilidades bizarras.
2012/12/13 Nicole Scherer <[email protected]>
> Caros,
>
> se entendi bem, o given e o when, assim como o case, são mais das formas
> alternativas ("há muitas maneiras de se fazer a mesma coisa em Perl") de se
> fazer "if-elsif-else" com linguagem mais coloquial. Certo?
>
> Seria o mesmo que:
>
> my $var = 'Carneirao';
> if ($var eq 'Carneirao'){say "Opa, sou eu!";}
> elsif ($var =~ /Sbrebows/){ say 'WTF???';}
> else {say "Nao sei o que quer dizer...";}
>
> Com a vantagem de economizar o ($var eq/=~ ...).
> Correto?
> Ou estou perdendo alguma coisa muito especial, que não percebi ainda?
>
>
> []'s
> Nicole
>
>
> ------------------------------
> *De:* Andre Carneiro <[email protected]>
> *Para:* Perl Mongers Rio de Janeiro <[email protected]>
> *Enviadas:* Quinta-feira, 13 de Dezembro de 2012 9:36
> *Assunto:* Re: [Rio-pm] [Passatempo] Interpretador para BrainFuck
>
> Meio estranho você não entender when e entender given, mas vamos lá!
> Normalmente eu mandaria um RTFM, mas já estou velho e manso ultimamente...
>
> given é equivalente a 'switch'
>
> when é equivalente a 'case'
>
> Então, se você estiver usando Perl 5.10 ainda,
>
> <code>
> use feature qw/switch say/; #Isso sim, é escroto pra caramba! Se a função
> chama-se 'given', pra que mudar o nome para switch???
> use strict;
> use warnings;
> #Ou dane-se tudo isso e faça 'use common::sense';
>
>
> my $var = 'Carneirao';
>
> given($var){
> when( 'Carneirao'){
> say "Opa, sou eu!";
> }
> when(/Sbrebows/){
> say 'WTF???';
> }
> default {
> say "Nao sei o que quer dizer...";
> }
> }
>
> #Antigamente fazíamos assim:
>
> use Switch;
>
>
> switch($var){
> case 'Carneirao' { say "Opa, sou eu!";}
> case /Sbrebows/ {say "WTF";}
> else { say "Nao sei o que quer dizer";}
> }
>
>
> #Mas, do Perl 5.10 em diante, o módulo Switch está com status
> 'deprecated', então use a primeira opção!
>
> </code>
>
>
> Agora sim! Para mais informações RTFM my friend!!!
>
>
> http://perldoc.perl.org/Switch.html
>
> http://perldoc.perl.org/perlsyn.html#Switch-Statements
>
>
> :-)
> Cheers!
>
>
>
>
> 2012/12/13 breno <[email protected]>
>
> 2012/12/12 Aureliano Guedes <[email protected]>:
> > Ainda não tinha me aventurado nas novidades do Perl 5.16.
> >
> > o when eu entendi, mas o given não, alguem poderia me explicar o uso do
> > given??
> >
> > O break ja funciona no 5.16?? se sim, como???
> >
>
> given/when existe no Perl desde a versão 5.10, com direito a default,
> continue e break =)
>
> Pra saber como, dá uma olhada aqui ó:
>
> http://perldoc.perl.org/perlsyn.html#Switch-Statements
>
> tem tudo explicadinho, inclusive o fato de que given() é experimental
> - a forma recomendada de definir o tópico é com for().
>
> Boa diversão!
>
> []s
>
> -b
> _______________________________________________
> Rio-pm mailing list
> [email protected]
> http://mail.pm.org/mailman/listinfo/rio-pm
>
>
>
>
> --
> André Garcia Carneiro
> Software Engineer
> (11)982907780
>
> _______________________________________________
> Rio-pm mailing list
> [email protected]
> http://mail.pm.org/mailman/listinfo/rio-pm
>
>
> _______________________________________________
> Rio-pm mailing list
> [email protected]
> http://mail.pm.org/mailman/listinfo/rio-pm
>
--
Tiago B. Peczenyj
Linux User #405772
http://pacman.blog.br
_______________________________________________
Rio-pm mailing list
[email protected]
http://mail.pm.org/mailman/listinfo/rio-pm