No ano passado nós falamos sobre o Test::Perl::Critic (link em inglês), hoje nós apresentamos uma maneira alternativa e potencialmente mais conveniente de interagir com o Perl::Critic visando garantir a aderência às boas práticas de programação: o criticism (link em inglês). O criticism é um pragma com vários níveis de severidade que vão invocar o Perl::Critic em cada execução do seu código e até mesmo insistir que o strict esteja habilitado. É claro que todos esses testes causam um impacto no desempenho que seria inaceitável em produção. Por sorte, o módulo trata dessa situação de uma maneira esperta, permitindo que o mesmo código possa ser utilizando tanto em desenvolvimento quanto em produção sem modificações. Se o módulo Perl::Critic não estiver disponível, carregar o criticism se transformará em uma operação nula.
$ perl mod23.pl
RCS keywords $Id$ not found at a line 1
RCS keywords $Revision$, $HeadURL$, $Date$ not found at a line 1
RCS keywords $Revision$, $Source$, $Date$ not found at a line 1
No "VERSION" variable found at a line 1
Code not contained in explicit package at a line 1
Code not contained in explicit package at a line 2
Code not contained in explicit package at a line 3
Code not contained in explicit package at a line 5
Double-sigil dereference at a line 6
Module does not end with "1;" at a line 6
Code not contained in explicit package at a line 6
É importante notar que, aparentemente, existe uma dependência não documentada na versão 0.04. Pelos meus testes, os criticismos brutais não são disparados se o pragma warnings também não estiver habilitado. Isso não parece afetar os outros níveis de severidade, que emitem mensagens normalmente, até o nível 'gentle' que não reclama em nada do código.
1 use criticism 'brutal'; 2 use strict; 3 use warnings; 4 5 $a = sub{ }; 6 &$a;
Traduzido por Nilson Santos Figueiredo Júnior.