Até porque o setEnable(0) só afetaria os novos DateTimes, não é? <div><br></div><div>Como funciona o "no" ? </div><div><br></div><div>Ficaria legal, no lugar de Enable/Disable.</div><div><br></div><div>use Fix::DateTime;</div>

<div>...</div><div>no Fix::DateTime;</div><div>...</div><div><br><div class="gmail_quote">2013/1/9 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">Valeu Eden<div><br></div><div>Então, eu li sobre o "rebless" depois de ter implementado. Acho ate que é uma solução mais elegante.</div>

<div><br></div><div>Porém se os internals do DateTime forem alterados, os meus testes vão quebrar. Não é muito confiavel isso mas é interessante de se pensar.</div>

<div><br></div><div>Outra coisa que eu estava vendo é que o Enable é muito confuso. Seria mais facil, num problema em produção, comentar a linha que adiciona o meu modulo e mandar bala. Ou adicionar este módulo caso a configuração permita.<div>

<div class="h5"><br>

<br><div class="gmail_quote">2013/1/9 Eden Cardim <span dir="ltr"><<a href="mailto:eden@insoli.de" target="_blank">eden@insoli.de</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">



The following message is a courtesy copy of an article<br>
that has been posted to gmane.comp.lang.perl.perl-mongers.saopaulo as well.<br>
<br>
>>>>> "Tiago" == Tiago Peczenyj <<a href="mailto:tiago.peczenyj-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org" target="_blank">tiago.peczenyj-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org</a>> writes:<br>


<br>
    Tiago> Oi Galera Me foi passado um exercicio bem interessante<br>
    Tiago> sobre "corrigir" um comportamento da classe DateTime.<br>
<br>
    Tiago> O default time zone da classe DateTime é UTC, porém alguem<br>
    Tiago> ignorou isso e desenvolveu uma boa quantidade de coisas,<br>
    Tiago> colocou em produção, etc, só descobriu q tinha algo errado<br>
    Tiago> quando alguns testes falhavam em alguns horarios<br>
    Tiago> específicos. No caso algumas coisas estavam em EST (como o<br>
    Tiago> banco de dados) e para resolver isso "logo", no lugar de<br>
    Tiago> alterar o sistema (por medinho, tempo, etc) resolveram<br>
    Tiago> fazer algo mais grosseiro.<br>
<br>
    Tiago> A minha solução ficou assim:<br>
<br>
    Tiago> <a href="https://github.com/peczenyj/Fix-DateTime" target="_blank">https://github.com/peczenyj/Fix-DateTime</a><br>
<br>
    Tiago> Acho que esta menos pior do que poderia ser, mas ainda<br>
    Tiago> fede. Não é exatamente um Fix, mas resolve algumas coisas.<br>
<br>
Algumas considerações:<br>
<br>
- Não precisa mudar todos os métodos, só um wrapper no ->new() já<br>
  basta. Com esse tipo de alteração, quanto menos intrusivo você for,<br>
  melhor, vai que alguém decide mudar algo nos internals e colocar o<br>
  new numa classe base, aí o DateTime::new vai deixar de existir e vai<br>
  quebrar o wrapper.<br>
<br>
- Apesar do Michael Schwern achar bacana o uso de "goto &sub;" porque<br>
  faz parecer que o wrapper não está lá, eu detesto essa construção<br>
  exatamente por esse motivo. Essa forma de invocação do goto<br>
  sobrescreve a chamada atual da stack com a nova chamada, em algumas<br>
  situações isso pode virar um pesadelo de depuração quando outra<br>
  pessoa pegar o código e não entender porque raios o time_zone está<br>
  em EST quando a doc diz que é UTC (logo em seguida ele vai começar a<br>
  programar em Java, dizendo que Perl é uma merda).<br>
<br>
- É possível que o teu bloco BEGIN execute antes do BEGIN implícito do<br>
  use DateTime em algum outro lugar do seu código, por isso você<br>
  precisa carregar o DateTime explicitamente.<br>
<br>
Eu implementaria assim:<br>
<br>
use DateTime;<br>
our ENABLE = 1;<br>
our %defaults = (time_zone => 'EST');<br>
<br>
BEGIN {<br>
  if($ENABLE) {<br>
    my $sub = DateTime->can('new')<br>
      or die "AVISO: Método DateTime->new sumiu, ISSO VAI QUEBRAR O SISTEMA TODO";<br>
    *DateTime::new = sub {<br>
       my($class, %args) = @_;<br>
       $class->$sub(%defaults, %args);<br>
    };<br>
  }<br>
}<br>
<span><font color="#888888"><br>
--<br>
Eden Cardim -- Insolide Soluções de TI Ltda.<br>
<a href="tel:%2B55%2011%209644%208225" value="+551196448225" target="_blank">+55 11 9644 8225</a><br>
<a href="http://insoli.de" target="_blank">http://insoli.de</a><br>
</font></span><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><br clear="all"><div><br></div></div></div><div class="im">-- <br>Tiago B. Peczenyj<br>Linux User #405772<br><br><a href="http://about.me/peczenyj" target="_blank">http://about.me/peczenyj</a>
</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">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><br><br clear="all"><div><br></div>-- <br><div><span style="color:rgb(51,51,51);font-size:x-small">Saravá,</span></div><div><span style="color:rgb(51,51,51);font-size:x-small">Renato CRON</span></div>

<div><div style="text-align:right"><font size="1" color="#333333"><a href="http://www.renatocron.com/blog/" target="_blank">http://www.renatocron.com/blog/</a></font></div></div><div style="text-align:right"><font size="1" color="#333333"><a href="http://twitter.com/#!/renato_cron" target="_blank">@renato_cron</a></font></div>


</div>