r10 - 17 Mar 2009 - NelsonFerraz
Módulos Recomendados do CPAN
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 codigo; quando isto nao for possivel, apresentaremos links para outros artigos. TODO: publicar uma receita para cada módulo recomendado.Class::Accessor
O Class::Accessor cria toda a infraestrutura de orientação a objetos automaticamente, incluindo construtor e metodos de acesso (setters e getters). Um exemplo simples. Ao inves de escrever codigo 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 metodos de acesso (setters e getters).
use Dog; my $dog = Dog->new( name => 'Tobby' ); print $dog->name();
Config::General
O Config::General faz o parsing de arquivos de configuração.
use Config::General;
$conf = new Config::General("config.conf");
my %config = $conf->getall;
DateTime?
O melhor módulo para resolver problemas envolvendo data e hora.DBI
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:- DBD::mysql
- DBD::Oracle
- DBD::Pg
- DBD::SQLite
- DBD::Sybase
DBIx::Class
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 codigo 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? .)
Exception::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;
}
File::Slurp
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
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.List::MoreUtils
Um módulo que acrescenta funções úteis ao List::Util. (Exemplos: any, all, none, notall, ...)local::lib
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 $HOME. (Veja o artigo Usando o local::lib.)Log::Log4perl
Crie arquivos de log com vários níveis de depuração e categorias, de maneira simples e eficiente.MIME::Lite
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();
Module::Starter
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
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".

