[Rio-pm] use 5.016 ou use strict/warnings

Aureliano Guedes guedes_1000 em hotmail.com
Segunda Março 4 03:38:02 PST 2013


fato ponto.de.exclamação

a bosta do shift do meu teclado não funciona.

From: leonardo.balter em gmail.com
Date: Sun, 3 Mar 2013 23:41:29 -0300
To: rio-pm em pm.org
Subject: Re: [Rio-pm] use 5.016 ou use strict/warnings

Se extrairem as mega respostas do Garu na lista da pra escrever um livro e ganhar uma graninha.




Em 3 de março de 2013 07:53, Ole Peter Smith <ole.ufg em gmail.com> escreveu:


o 'nosso' breno servindo o gabarito....
garu++!
0le
Send via Android
On Mar 3, 2013 2:16 AM, "breno" <breno em rio.pm.org> wrote:



> Mete um common::sense na bagaça toda e seja feliz!

>> use perl5i;

>>> strict/warnings mas pela simples força do hábito.



perl5i, common::sense, Toolkit, strictures, Real::Handy,

Modern::Perl... todo mundo cedo ou tarde percebe um padrão no seu

código Perl, um conjunto de módulos e pragmata que sempre gosta de

usar em seus projetos. Perl é uma linguagem moldada no formato

TIMTOWTDI, então parece injusto com os desenvolvedores que um ou outro

conjunto de módulos seja ativado por padrão em qualquer código Perl.

Agora, uma vez que você encontrou o *seu* estilo, imagine ter que

escrever isso tudo no cabeçalho de cada novo arquivo:



-----------8<-----------

use 5.16.0;

use warnings;

no indirect;

no autovivification;

use true;

use autodie qw(:all);

use autobox;

use utf8;

use File::stat;

use Time::Piece;

use Try::Tiny;

use Carp qw(croak);

...

----------->8-----------



Complicado, né? Por isso muitos autores acabam criando suas coletâneas

e distribuindo no CPAN, como as citadas lá no começo. No entanto, isso

também não é de graça: usuários do seu módulo agora tem que baixar uma

nova dependência apenas porque você teve preguiça de escrever "use

$modulo"; e você AINDA tem que escrever "use COLETANEA" no inicio de

cada novo arquivo que criar.



Independente da coletânea utilizada, o problema não foi resolvido,

apenas contornado. Mas nada temam, há uma alternativa:



App::MyPerl

==========



Ao instalar o App::MyPerl, você ganha dois programas na linha de

comando: "myperl" e "myprove". A partir daí, basta editar o arquivo

.myperl/modules dentro da raiz do seu projeto e adicionar a lista de

módulos e pragmata que você quer. Por exemplo:



-----------8<-----------

v5.16

warnings

autodie=:all

----------->8-----------



Ao rodar seu programa com "myperl", todos os módulos desse arquivo já

estarão carregados! O mesmo acontece para qualquer biblioteca dentro

de "lib" e "t/lib", o que torna tudo muito mais fácil para o seu

desenvolvimento dentro de diretórios de projetos (como os criados pelo

Module::Starter, shipit ou Dist::Zilla). Tudo isso sem source filters

e sem que os erros e avisos sejam colocados em linhas diferentes (como

o que acontece quando linhas são adicionadas sem modificar o arquivo

original). Para rodar seus testes, é só usar o "myprove" em vez do

"prove".



Os mais safos podem estar pensando: "ok, mas qual a vantagem disso em

relação a simplesmente fazer alias myperl='perl -Mv5.16 -M...'? Não é

tão difícil assim." Tem razão, não é. Mas o "myperl" tem duas grandes

vantagens.



A primeira é que o diretório ".myperl" é criado por projeto. Assim

você pode definir diferentes conjuntos de pragmata dependendo do tipo

de projeto que está criando, por exemplo se é um projeto pessoal

pequeno, um trabalho profissional ou um com determinadas restrições de

ambiente.



A segunda vantagem do "myperl" é que, com ele, você não só tem o perl

com as configurações padrão que bem entender, mas garante que essas

mesmas configurações serão passadas para todos os usuários do seu

módulo automaticamente, sem a inclusão de novas dependências! Como? É

só adicionar a seguinte função ao seu Makefile.PL:



sub MY::postamble {

   qq{distdir: myperl_rewrite\nmyperl_rewrite:

create_distdir\n\tmyperl-rewrite \$(DISTVNAME)}

}



Pronto. Agora, quando for fazer o build para o CPAN, o myperl vai

adicionar as linhas pertinentes no código dentro da sua distribuição

durante o 'make dist' \o/



Enfim, o App::MyPerl é mais uma solução para facilitar a vida de quem

quer módulos e pragmas específicos para seus projetos, só que sem ter

que carregar mais uma dependência ou adicionar uma linha de código

sequer durante o desenvolvimento do seu programa. Adicione alguns

atalhos ao seu gerador de módulos favorito (module-starter, dzil,

shipit, entre outros) e você terá algo bem bacana na sua caixa de

ferramentas!



Disclaimer: ainda há algumas pontas soltas, o projeto acabou de nascer

e não está particularmente maduro - eu mesmo já mandei alguns pull

requests pro Matt - mas vale a pena ficar de olho!





[]s



-b

_______________________________________________

Rio-pm mailing list

Rio-pm em pm.org

http://mail.pm.org/mailman/listinfo/rio-pm



_______________________________________________

Rio-pm mailing list

Rio-pm em pm.org

http://mail.pm.org/mailman/listinfo/rio-pm



_______________________________________________
Rio-pm mailing list
Rio-pm em pm.org
http://mail.pm.org/mailman/listinfo/rio-pm 		 	   		  
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/rio-pm/attachments/20130304/7d40a4fc/attachment-0001.html>


Mais detalhes sobre a lista de discussão Rio-pm