Módulos Recomendados do CPAN

Nelson Ferraz
Publicado em 17/03/2009

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 código; quando isto nao for possível, apresentaremos links para outros artigos.

TODO: publicar uma receita para cada módulo recomendado.

* Class::Accessor
* Config::General
* DateTime
* DBI
* DBIx::Class
* Exception::Class
* File::Slurp
* JSON
* List::MoreUtils
* local::lib
* Log::Log4perl
* MIME::Lite
* Module::Starter
* Moose
* Perl::Critic
* Perl::Tidy
* Regexp::Common
* Template
* Text::CSV
* XML::Compile::Schema
* XML::LibXML
* XML::Simple
* YAML

Class::Accessor

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();

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 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? .)

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 $index.t. (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".

Perl::Critic

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.)

Perl::Tidy

Limpa e organiza o seu código fonte. (Use o perl-tidy a partir da linha de comando.)

Regexp::Common

Expressões regulares prontas, testadas e aprovadas, para diversos usos comuns.

Template

Sistema de templates flexível e poderoso.

Text::CSV

Leia e manipule arquivos separados por vírgula (CSV).

XML::Compile::Schema

Leia e escreva arquivos xml, de acordo com schemas (xsd).

XML::LibXML

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.

XML::Simple

API simples para abrir e salvar arquivos XML. (Especialmente arquivos de configuração.)

YAML

Um formato de serialização de dados, otimizada para humanos. (Veja também: JSON)

Leia mais

* Recommended CPAN Modules

AUTHOR

Nelson Ferraz

blog comments powered by Disqus