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 <bionica2007-p...@yahoo.com> > 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 <andregarciacarne...@gmail.com> > *Para:* Perl Mongers Rio de Janeiro <rio-pm@pm.org> > *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 <br...@rio.pm.org> > > 2012/12/12 Aureliano Guedes <guedes_1...@hotmail.com>: > > 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 > Rio-pm@pm.org > http://mail.pm.org/mailman/listinfo/rio-pm > > > > > -- > André Garcia Carneiro > Software Engineer > (11)982907780 > > _______________________________________________ > Rio-pm mailing list > Rio-pm@pm.org > http://mail.pm.org/mailman/listinfo/rio-pm > > > _______________________________________________ > Rio-pm mailing list > Rio-pm@pm.org > http://mail.pm.org/mailman/listinfo/rio-pm > -- Tiago B. Peczenyj Linux User #405772 http://pacman.blog.br
_______________________________________________ Rio-pm mailing list Rio-pm@pm.org http://mail.pm.org/mailman/listinfo/rio-pm