Nelson FerrazPublicado em 17/03/2009
r10 - 17 Mar 2009 - NelsonFerraz
O CPAN possui mais de 14 mil módulos, para as mais diferentes finalidades. Este artigo procura listar alguns dos módulos mais importantes, que você deve conhecer.
Uma das perguntas mais frequentes, feitas por usuários iniciantes e avançados é: "qual módulo eu posso usar para fazer X?".
Existem, por exemplo, dezenas de módulos para manipular datas, abrir arquivos de configuração, xml, etc.
Este artigo irá apresentar uma lista de módulos frequentemente recomendados. Nos casos mais simples, apresentaremos exemplos de código; quando isto nao for possível, apresentaremos links para outros artigos.
TODO: publicar uma receita para cada módulo recomendado.
O Class::Accessor cria toda a infraestrutura de orientação a objetos automaticamente, incluindo construtor e métodos de acesso (setters e getters).
Um exemplo simples. Ao inves de escrever código como este:
package Dog;
sub new {
my $self = shift;
bless { @_ }, $self;
}
sub name {
my $self = shift;
if ($@) {
$self->{name} = shift;
}
return $self->{name};
}
Escreva apenas o seguinte:
package Dog;
use base 'Class::Accessor';
mk_accessors('name');
E isso e' tudo o que voce precisa para ter uma classe com constructor (new) e métodos de acesso (setters e getters).
use Dog;
my $dog = Dog->new( name => 'Tobby' );
print $dog->name();
O Config::General faz o parsing de arquivos de configuração.
use Config::General;
$conf = new Config::General("config.conf");
my %config = $conf->getall;
O melhor módulo para resolver problemas envolvendo data e hora.
O módulo base para lidar com bases de dados em Perl. Além do DBI você também precisará de um driver específico para a sua base de dados:
Um mapeador objeto-relacional, que permite lidar com a base de dados usando apenas métodos e estruturas de dados em perl. Ao inves de escrever código SQL, voce pode usar Perl:
my @albums = $schema->resultset('Album')->search({
artist => { 'like', '%Lamb%' },
title => { 'like', '%Fear of Fours%' },
});
(Veja o artigo Introducao ao DBIx::Class? .)
Um módulo que permite a você trabalhar com hierarquias de exceções orientadas a objeto. Uma solucao mais flexivel e poderosa do que o uso de strings em $@.
# try
eval {
MyException->throw( error => 'I feel funny.' );
};
if ( my $e = Exception::Class->caught('MyException') ) {
warn $e->error, "\n", $e->trace->as_string, "\n";
warn join ' ', $e->euid, $e->egid, $e->uid, $e->gid, $e->pid, $e->time;
exit;
} elsif ( my $e = Exception::Class->caught() ) {
ref $e ? $e->rethrow : die $e;
}
Leia ou escreva arquivos de texto completos, de maneira eficiente.
use File::Slurp;
my $text = read_file( 'filename' ) ;
my @lines = read_file( 'filename' ) ;
write_file( 'filename', @lines ) ;
JSON (Javascript Object Notation) é uma linguagem de serialização de dados, parecida com o formato interno de Perl, e compatível com aplicações AJAX.
Um módulo que acrescenta funções úteis ao List::Util. (Exemplos: any, all, none, notall, ...)
O local::lib altera o local de instalação padrão dos módulos, resolvendo problemas de permissão e mantendo-os organizados no seu diretório $index.t. (Veja o artigo Usando o local::lib.)
Crie arquivos de log com vários níveis de depuração e categorias, de maneira simples e eficiente.
Um modulo simples para enviar mensagens por email:
use MIME::Lite;
$msg = MIME::Lite->new(
From =>'me@myhost.com',
To =>'you@yourhost.com',
Cc =>'some@other.com, some@more.com',
Subject =>'Helloooooo, nurse!',
Data =>"How's it goin', eh?"
);
$msg->send();
Kit de inicialização de projetos em Perl. Deixe o Module::Starter escrever o esqueleto do seu projeto, incluindo testes básicos e arquivos de instalacão. (Leia o artigo sobre o Module::Starter? )
Moose é uma extensão do sistema de orientação a objetos de Perl5, ou um "sistema pós-moderno de orientação de objetos", segundo sua própria definição.
package Point;
use Moose; # automatically turns on strict and warnings
has 'x' => (is => 'rw', isa => 'Int');
has 'y' => (is => 'rw', isa => 'Int');
package Point3D;
use Moose;
extends 'Point';
has 'z' => (is => 'rw', isa => 'Int');
(Veja o artigo Introducao ao Moose? .)
Veja também: Mouse? , que se define como o "Moose sem chifres".
Avalie a qualidade do seu código de acordo com um conjunto de boas práticas. (Use o perl-critic a partir da linha de comando.)
Limpa e organiza o seu código fonte. (Use o perl-tidy a partir da linha de comando.)
Expressões regulares prontas, testadas e aprovadas, para diversos usos comuns.
Sistema de templates flexível e poderoso.
Leia e manipule arquivos separados por vírgula (CSV).
Leia e escreva arquivos xml, de acordo com schemas (xsd).
This module is an interface to libxml2, providing XML and HTML parsers with DOM, SAX and XMLReader interfaces, a large subset of DOM Layer 3 interface and a XML::XPath-like interface to XPath API of libxml2.
API simples para abrir e salvar arquivos XML. (Especialmente arquivos de configuração.)
Um formato de serialização de dados, otimizada para humanos. (Veja também: JSON)
Nelson Ferraz