<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="moz-cite-prefix">\0\<br>
      /0/<br>
      <br>
      hhahahaha .. quando você vê o primeiro módulo lá até demora um
      pouco pra "cair a ficha" ...<br>
      <br>
      Que venha outros módulos<br>
      <br>
      Abs<br>
      <br>
      <br>
      On 23/01/2013 19:45, Tiago Peczenyj wrote:<br>
    </div>
    <blockquote
cite="mid:CAB_Cdjwq-igyS7aja4tmhd0b9tTZ0LVB7UCcmPdiAJQp5FAz2w@mail.gmail.com"
      type="cite">
      <pre wrap="">q emossaum!

<a class="moz-txt-link-freetext" href="http://search.cpan.org/~pacman/Lazy-Bool-0.01/">http://search.cpan.org/~pacman/Lazy-Bool-0.01/</a>

Esse modulo não faz muita coisa de util (ate agora) mas eu bolei uma
forma simples de fazer um wrap em valores booleanos e deixa-los lazy
até que seja necessario utiliza-los.

E para deixar mais legal, os operadores and, or e not são suportados E
lazy. Ou seja vc pode fazer coisas como

  use Lazy::Bool;
  use Test::More tests=> 3;
  my $a = 6;
  my $b = 4;
  my $x  = Lazy::Bool->new(sub{ $a > $b }); # exemplo ruim mas imagine
q isso seja "custoso"
  my $false = Lazy::Bool::false;

  my $result = ($x | $false) & ( ! ( $false & ! $false ) );

  # NOW the expressions will be evaluate
  ok($result,    "complex expression should be true");
  ok(!! $x ,  "double negation of true value should be true");        
  ok(!!! $false, "truple negation of false value should be true");

O codigo em si é simples, faço um override do &, | e ! alem do bool
(para lidar com o "casting" de objeto para booleano).

Eu tentei suportar && e || mas não foi possivel com o que eu aprendi ate agora.

É claro que existem outros modulos que fazem tudo isso e muito mais.
Meu objetivo foi entender o PAUSE acima de tudo. E use overload.

Agora ficam algumas duvidas

 - devo implementar curto circuito? originalmente o & e | não são
curto-circuitados.       Significa que isto

if ( false & qqcoisa )

o qqcoisa vai ser avaliado sempre. com && eu não tenho isso.

- devo memorizar o resultado da expressão? eu estou adiando até o
ultimo momento para avaliar a expressão, mas depois vou fazer tantas
vezes forem necessario. parece esquisito.

Eu imaginei q posso adicionar opções no construtor para adicionar
estes comportamentos. Ou ligar tudo sem me preocupar, afinal ninguem
usa isso em produção, é beta, etc. Sugestòes?

De qq forma se eu criar um proximo modulo eu vou usar o dist::zilla

abracetas

Pac


</pre>
    </blockquote>
    <br>
    <br>
    <div class="moz-signature">-- <br>
      Eduardo Almeida - Engenharia de Software<br>
      <a class="moz-txt-link-abbreviated" href="mailto:eduardo@web2solutions.com.br">eduardo@web2solutions.com.br</a> - 27 3321-2430 / 27 9839 3755<br>
      <br>
      <b>WEB2 Solutions</b> - Inovando, sempre!</div>
  </body>
</html>