Nicole<div><br></div><div>o when usa smart matching ~~ </div><div><br></div><div>E a vantagem é um codigo enxuto.</div><div><br></div><div>Por exemplo, isto</div><div><br></div><div><div>        if($type ~~ /^[FUP]$/) { code }</div>

<div>        elsif($type ~~ "S")          {  code }</div><div>        elsif($type ~~ "B")         {  code }</div><div>        else              {  code }</div></div><div><br></div><div>vira isto</div>
<div>
<div>    given ($type){</div><div>        when(/^[FUP]$/) { code }</div><div>        when("S")          {  code }</div><div>        when("B")         {  code }</div><div>        default              {  code }</div>

<div>    }</div><div><br></div><div>a vantagem é que a variavel $type foi usada apenas uma vez. eu não tenho muito espaço para repeti-la</div><div><br></div><div>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.</div>

<br><div class="gmail_quote">2012/12/13 Nicole Scherer <span dir="ltr"><<a href="mailto:bionica2007-perl@yahoo.com" target="_blank">bionica2007-perl@yahoo.com</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div><div style="font-size:12pt;font-family:times new roman,new york,times,serif">Caros,<br><br>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?<br>

<br><div>Seria o mesmo que:<br><br></div><div>my $var = 'Carneirao';</div><div>if ($var eq 'Carneirao'){say "Opa, sou eu!";}</div>elsif ($var =~ /Sbrebows/){ say 'WTF???';}<div><span>else {</span><span>say "Nao sei o que quer dizer...";}<br>

</span></div><div><br></div><div>Com a vantagem de economizar o  ($var eq/=~ ...).<br></div><div style="font-style:normal;font-size:16px;background-color:transparent;font-family:times new roman,new york,times,serif">Correto?</div>

<div>Ou estou perdendo alguma coisa muito especial, que não percebi ainda?</div><div><br></div><div style="font-style:normal;font-size:16px;background-color:transparent;font-family:times new roman,new york,times,serif"><br>

</div><div style="font-style:normal;font-size:16px;background-color:transparent;font-family:times new roman,new york,times,serif">[]'s</div><div style="font-style:normal;font-size:16px;background-color:transparent;font-family:times new roman,new york,times,serif">

Nicole<br></div><div style="font-style:normal;font-size:16px;background-color:transparent;font-family:times new roman,new york,times,serif"><br></div><div style="font-style:normal;font-size:16px;background-color:transparent;font-family:times new roman,new york,times,serif">

<br></div>  <div style="font-family:times new roman,new york,times,serif;font-size:12pt"> <div style="font-family:times new roman,new york,times,serif;font-size:12pt"> <div dir="ltr"> <font face="Arial"> <hr size="1">  <b><span style="font-weight:bold">De:</span></b> Andre Carneiro <<a href="mailto:andregarciacarneiro@gmail.com" target="_blank">andregarciacarneiro@gmail.com</a>><br>

 <b><span style="font-weight:bold">Para:</span></b> Perl Mongers Rio de Janeiro <<a href="mailto:rio-pm@pm.org" target="_blank">rio-pm@pm.org</a>> <br> <b><span style="font-weight:bold">Enviadas:</span></b> Quinta-feira, 13 de Dezembro de 2012 9:36<br>

 <b><span style="font-weight:bold">Assunto:</span></b> Re: [Rio-pm] [Passatempo] Interpretador para BrainFuck<br> </font> </div><div><div class="h5"> <br><div>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...<br>

<div><br></div><div>given é equivalente a 'switch'</div><div><br></div>
<div>when é equivalente a 'case'</div><div><br></div><div>Então, se você estiver usando Perl 5.10 ainda,</div><div><br></div><div><code></div><div>use feature qw/switch say/; #Isso sim, é escroto pra caramba! Se a função chama-se 'given', pra que mudar o nome para switch??? </div>


<div>use strict;</div><div>use warnings;</div><div>#Ou dane-se tudo isso e faça 'use common::sense';</div><div><br></div><div><br></div><div>my $var = 'Carneirao';</div><div><br></div><div>given($var){</div>


<div>   when( 'Carneirao'){</div><div>       say "Opa, sou eu!";</div><div>   }</div><div>   when(/Sbrebows/){</div><div>      say 'WTF???';</div><div>   }</div><div>   default {</div><div>      say "Nao sei o que quer dizer...";</div>


<div>   }</div><div>}</div><div><br></div><div>#Antigamente fazíamos assim:</div><div><br></div><div>use Switch;</div><div><br></div><div><br></div><div>switch($var){</div><div>     case 'Carneirao' { say "Opa, sou eu!";}</div>


<div>     case /Sbrebows/ {say "WTF";}</div><div>     else { say "Nao sei o que quer dizer";}</div><div>}</div><div><br></div><div><br></div><div>#Mas, do Perl 5.10 em diante, o módulo Switch está com status  'deprecated', então use a primeira opção!</div>


<div><br></div><div></code></div><div><br></div><div><br><div><div>Agora sim! Para mais informações RTFM my friend!!!</div><div><br></div><div><br></div><div><a rel="nofollow" href="http://perldoc.perl.org/Switch.html" target="_blank">http://perldoc.perl.org/Switch.html</a></div>


<div><br></div><div><a rel="nofollow" href="http://perldoc.perl.org/perlsyn.html#Switch-Statements" target="_blank">http://perldoc.perl.org/perlsyn.html#Switch-Statements</a></div><div><br></div><div><br></div><div>:-)</div>

<div>Cheers!</div><div><br></div>
<div><br></div><div><br><br><div>2012/12/13 breno <span dir="ltr"><<a rel="nofollow" href="mailto:breno@rio.pm.org" target="_blank">breno@rio.pm.org</a>></span><br><blockquote style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


2012/12/12 Aureliano Guedes <<a rel="nofollow" href="mailto:guedes_1000@hotmail.com" target="_blank">guedes_1000@hotmail.com</a>>:<br>
<div>> Ainda não tinha me aventurado nas novidades do Perl 5.16.<br>
><br>
> o when eu entendi, mas o given não, alguem poderia me explicar o uso do<br>
> given??<br>
><br>
> O break ja funciona no 5.16?? se sim, como???<br>
><br>
<br>
</div>given/when existe no Perl desde a versão 5.10, com direito a default,<br>
continue e break =)<br>
<br>
Pra saber como, dá uma olhada aqui ó:<br>
<br>
<a rel="nofollow" href="http://perldoc.perl.org/perlsyn.html#Switch-Statements" target="_blank">http://perldoc.perl.org/perlsyn.html#Switch-Statements</a><br>
<br>
tem tudo explicadinho, inclusive o fato de que given() é experimental<br>
- a forma recomendada de definir o tópico é com for().<br>
<br>
Boa diversão!<br>
<br>
[]s<br>
<span><font color="#888888"><br>
-b<br>
</font></span><div><div>_______________________________________________<br>
Rio-pm mailing list<br>
<a rel="nofollow" href="mailto:Rio-pm@pm.org" target="_blank">Rio-pm@pm.org</a><br>
<a rel="nofollow" href="http://mail.pm.org/mailman/listinfo/rio-pm" target="_blank">http://mail.pm.org/mailman/listinfo/rio-pm</a><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br>André Garcia Carneiro<br>Software Engineer<br><a href="tel:%2811%29982907780" value="+5511982907780" target="_blank">(11)982907780</a><br>
</div></div></div>
</div><br>_______________________________________________<br>Rio-pm mailing list<br><a href="mailto:Rio-pm@pm.org" target="_blank">Rio-pm@pm.org</a><br><a href="http://mail.pm.org/mailman/listinfo/rio-pm" target="_blank">http://mail.pm.org/mailman/listinfo/rio-pm</a><br>

<br> </div></div></div> </div>  </div></div><br>_______________________________________________<br>
Rio-pm mailing list<br>
<a href="mailto:Rio-pm@pm.org">Rio-pm@pm.org</a><br>
<a href="http://mail.pm.org/mailman/listinfo/rio-pm" target="_blank">http://mail.pm.org/mailman/listinfo/rio-pm</a><br></blockquote></div><br><br clear="all"><div><br></div>-- <br>Tiago B. Peczenyj<br>Linux User #405772<br>

<br><a href="http://pacman.blog.br">http://pacman.blog.br</a><br>
</div>