<p>o 'nosso' breno servindo o gabarito....</p>
<p>garu++!</p>
<p>0le</p>
<p>Send via Android</p>
<div class="gmail_quote">On Mar 3, 2013 2:16 AM, "breno" <<a href="mailto:breno@rio.pm.org">breno@rio.pm.org</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
> Mete um common::sense na bagaça toda e seja feliz!<br>
>> use perl5i;<br>
>>> strict/warnings mas pela simples força do hábito.<br>
<br>
perl5i, common::sense, Toolkit, strictures, Real::Handy,<br>
Modern::Perl... todo mundo cedo ou tarde percebe um padrão no seu<br>
código Perl, um conjunto de módulos e pragmata que sempre gosta de<br>
usar em seus projetos. Perl é uma linguagem moldada no formato<br>
TIMTOWTDI, então parece injusto com os desenvolvedores que um ou outro<br>
conjunto de módulos seja ativado por padrão em qualquer código Perl.<br>
Agora, uma vez que você encontrou o *seu* estilo, imagine ter que<br>
escrever isso tudo no cabeçalho de cada novo arquivo:<br>
<br>
-----------8<-----------<br>
use 5.16.0;<br>
use warnings;<br>
no indirect;<br>
no autovivification;<br>
use true;<br>
use autodie qw(:all);<br>
use autobox;<br>
use utf8;<br>
use File::stat;<br>
use Time::Piece;<br>
use Try::Tiny;<br>
use Carp qw(croak);<br>
...<br>
----------->8-----------<br>
<br>
Complicado, né? Por isso muitos autores acabam criando suas coletâneas<br>
e distribuindo no CPAN, como as citadas lá no começo. No entanto, isso<br>
também não é de graça: usuários do seu módulo agora tem que baixar uma<br>
nova dependência apenas porque você teve preguiça de escrever "use<br>
$modulo"; e você AINDA tem que escrever "use COLETANEA" no inicio de<br>
cada novo arquivo que criar.<br>
<br>
Independente da coletânea utilizada, o problema não foi resolvido,<br>
apenas contornado. Mas nada temam, há uma alternativa:<br>
<br>
App::MyPerl<br>
==========<br>
<br>
Ao instalar o App::MyPerl, você ganha dois programas na linha de<br>
comando: "myperl" e "myprove". A partir daí, basta editar o arquivo<br>
.myperl/modules dentro da raiz do seu projeto e adicionar a lista de<br>
módulos e pragmata que você quer. Por exemplo:<br>
<br>
-----------8<-----------<br>
v5.16<br>
warnings<br>
autodie=:all<br>
----------->8-----------<br>
<br>
Ao rodar seu programa com "myperl", todos os módulos desse arquivo já<br>
estarão carregados! O mesmo acontece para qualquer biblioteca dentro<br>
de "lib" e "t/lib", o que torna tudo muito mais fácil para o seu<br>
desenvolvimento dentro de diretórios de projetos (como os criados pelo<br>
Module::Starter, shipit ou Dist::Zilla). Tudo isso sem source filters<br>
e sem que os erros e avisos sejam colocados em linhas diferentes (como<br>
o que acontece quando linhas são adicionadas sem modificar o arquivo<br>
original). Para rodar seus testes, é só usar o "myprove" em vez do<br>
"prove".<br>
<br>
Os mais safos podem estar pensando: "ok, mas qual a vantagem disso em<br>
relação a simplesmente fazer alias myperl='perl -Mv5.16 -M...'? Não é<br>
tão difícil assim." Tem razão, não é. Mas o "myperl" tem duas grandes<br>
vantagens.<br>
<br>
A primeira é que o diretório ".myperl" é criado por projeto. Assim<br>
você pode definir diferentes conjuntos de pragmata dependendo do tipo<br>
de projeto que está criando, por exemplo se é um projeto pessoal<br>
pequeno, um trabalho profissional ou um com determinadas restrições de<br>
ambiente.<br>
<br>
A segunda vantagem do "myperl" é que, com ele, você não só tem o perl<br>
com as configurações padrão que bem entender, mas garante que essas<br>
mesmas configurações serão passadas para todos os usuários do seu<br>
módulo automaticamente, sem a inclusão de novas dependências! Como? É<br>
só adicionar a seguinte função ao seu Makefile.PL:<br>
<br>
sub MY::postamble {<br>
   qq{distdir: myperl_rewrite\nmyperl_rewrite:<br>
create_distdir\n\tmyperl-rewrite \$(DISTVNAME)}<br>
}<br>
<br>
Pronto. Agora, quando for fazer o build para o CPAN, o myperl vai<br>
adicionar as linhas pertinentes no código dentro da sua distribuição<br>
durante o 'make dist' \o/<br>
<br>
Enfim, o App::MyPerl é mais uma solução para facilitar a vida de quem<br>
quer módulos e pragmas específicos para seus projetos, só que sem ter<br>
que carregar mais uma dependência ou adicionar uma linha de código<br>
sequer durante o desenvolvimento do seu programa. Adicione alguns<br>
atalhos ao seu gerador de módulos favorito (module-starter, dzil,<br>
shipit, entre outros) e você terá algo bem bacana na sua caixa de<br>
ferramentas!<br>
<br>
Disclaimer: ainda há algumas pontas soltas, o projeto acabou de nascer<br>
e não está particularmente maduro - eu mesmo já mandei alguns pull<br>
requests pro Matt - mas vale a pena ficar de olho!<br>
<br>
<br>
[]s<br>
<br>
-b<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>