ps: o que eu disse sobre performance pode ser equivoco pois é um modulo XS.<div>O PP esta aqui:</div><div><a href="http://cpan.uwinnipeg.ca/module/List::Util::PP">http://cpan.uwinnipeg.ca/module/List::Util::PP</a><br><br><div class="gmail_quote">

2011/5/29 Renato Santos <span dir="ltr"><<a href="mailto:renato.cron@gmail.com">renato.cron@gmail.com</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

Hmm,<div><br></div><div>pelo que li do reduce do list::util, ele pode ser explicado assim:</div><div>sabendo que a array é ($a, $b, $c, ...) você "anda" sobre a lista pegando sempre dois itens.</div><div>O valor do retorno é um scalar, que, é sempre o valor do ultimo item da array apos o processamento, porem, o bloco não é executado quando há apenas um item.</div>


<div>[parece mais simples usar/entender do que explicar ;p]</div><div>Por exemplo:<br>$undef = reduce {$a + $b} qw /1 2/;</div><div>e o bloco nao vai ser executado, pois $a foi associado com 1 e $b com 2.</div><div><br></div>


<div>$seis = reduce {$a + $b} qw /1 2 3/;</div><div>internamento o loop é:</div><div><b>loop 1:</b> $a = 1, $b = 2; # o resultado disso foi 3</div><div>então ele pega o resultado do block e joga no <b>$a = 3</b> </div><div>


<b>loop 2:  </b>$a = 3, $b = 3 [mas este foi o valor "puxado" da lista]</div><div>é feito isso até o final da lista, depois disso, é retornado o valor do calculo.</div><div><br></div><div>Os casos de MAX/MIN são [IMHO] um pouco de desperdício de processamento, pois há muito "sets" [ele vai associar o valor de $a várias vezes, mesmo quando não precisava].<br>


<br><div class="gmail_quote"><div class="im">2011/5/29 Stanislaw Pusep <span dir="ltr"><<a href="mailto:creaktive@gmail.com" target="_blank">creaktive@gmail.com</a>></span><br></div><div><div></div><div class="h5">

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Falando em programação funcional e extrapolando o tópico, alguém tem uma boa referência focada em Perl?<div>Mal consigo compreender reduce() do List::Util :(<br clear="all"><br>ABS()<div><div></div><div><br><br>

<br><br><div class="gmail_quote">2011/5/29 Tiago Peczenyj <span dir="ltr"><<a href="mailto:tiago.peczenyj@gmail.com" target="_blank">tiago.peczenyj@gmail.com</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">




A melhor analogia a subrotina grep do perl é o comando grep no unix.<br>
<br>
$ grep 'condição' arquivo<br>
<br>
e o grep imprime na stdout as linhas do arquivo que satisfazem a condição.<br>
<br>
Agora o map é engraçado pois ele não tem equivalente no mundo shell,<br>
mas sim no mundo de programação funcional, acredito que ja foi muito<br>
explorado aqui.<br>
<br>
2011/5/29 Satoshi Hayazaki <<a href="mailto:heavennevertouchedearthlyface@gmail.com" target="_blank">heavennevertouchedearthlyface@gmail.com</a>>:<br>
<div><div></div><div>><br>
><br>
> 2011/5/29 Renato Santos <<a href="mailto:renato.cron@gmail.com" target="_blank">renato.cron@gmail.com</a>><br>
>><br>
>> O map gera uma nova lista com o resultado que você retornou (percorrendo<br>
>> cada item da[s] lista[s] que você passou)<br>
>> e o grep retorna o conteudo original dependendo do resultando que você<br>
>> retornou no código para cada um dos item[s].<br>
>> Look this:<br>
>> @quatroZeros = map { 0 } qw / a b c d/;<br>
>> @vazio = grep { 0 } qw / a b c d/;<br>
>> ----------------------<br>
>> @quatroUm = map { 1 } qw / a b c d/;<br>
>> @abc_e_d = grep { 1 } qw / a b c d/;<br>
>><br>
><br>
><br>
> Adorei esse exemplo. Eu que não conhecia nenhum dos dois muito bem (só de<br>
> ouvir falar, mas nunca tinha usado) consegui entender perfeitamente com<br>
> isso. RenatoCRON++<br>
</div></div><div>> =begin disclaimer<br>
>   Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
>  SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br>
>  L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>
> =end disclaimer<br>
><br>
><br>
<br>
<br>
<br>
</div><font color="#888888">--<br>
Tiago B. Peczenyj<br>
Linux User #405772<br>
<br>
<a href="http://pacman.blog.br" target="_blank">http://pacman.blog.br</a><br>
</font><div><div></div><div>=begin disclaimer<br>
   Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
 SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br>
 L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>
=end disclaimer<br>
</div></div></blockquote></div><br></div></div></div>
<br>=begin disclaimer<br>
   Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
 SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br>
 L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>
=end disclaimer<br>
<br></blockquote></div></div></div><br><br clear="all"><br>-- <br><div class="im">Renato Santos<br><a href="http://www.renatocron.com/blog/" target="_blank">http://www.renatocron.com/blog/</a><br>
</div></div>
</blockquote></div><br><br clear="all"><br>-- <br>Renato Santos<br><a href="http://www.renatocron.com/blog/" target="_blank">http://www.renatocron.com/blog/</a><br>
</div>