Perl cada vez mais fácil

A minha diversão remunerada favorita é programar em Modern::Perl, algo que a cada dia fica ainda mais divertido e simples.

Uma das facilidades das quais estou tirando proveito hoje é o App::cpanminus do Miyagawa. Esse aplicativo foi criado para facilitar a instalação de módulos em ambientes com restrições de recursos, portanto ele não possui muitas dependências e tem um baixo footprint.

Em alguns posts antigos eu mostrei como configurar o aplicativo cpan, instalar módulos no home do usuário e criar um mini mirror local com CPAN::mini, então como aquecimento para o Equinócio que se aproxima eu vou atualizar esses tutoriais tornando os posts anteriores obsoletos.

Para contextualizar os novos leitores vamos a um rápido overview das ferramentas abordadas:

  • cpanm e cpanm: são aplicativos que automatizam a instalação de módulos Perl publicados no repositório www.cpan.org.
  • www.cpan.org: É o repositório de módulos Perl onde podemos encontrar (hoje) cerca de 89768 módulos escritos por cerca de 8734 autores, para as mais diversas finalidades. Frequentemente alternamos o significado da palavra cpan entre "o repositório da web" e o "aplicativo de instalação de módulos".
  • local::lib: é um módulo (ou biblioteca) que facilita a instalação de outros módulos em diretórios que não os da instalação padrão, o que é útil quando você não possui privilégios administrativos e precisa de alguns módulos extras.
  • CPAN::Mini: é outro módulo que permite a criação de um mini repositório local com a última versão de cada módulo do cpan. Isso é muito útil quando você precisa instalar módulos em um ambiente que não possui acesso à internet.

Mão na massa

Bom o primeiro passo agora, ao invés de configurar o aplicativo cpan é baixar e instalar o cpanm. Quando essa etapa é feita em conjunto com o sudo, o cpanm é instalando na árvore padrão de instalação do Perl. Para instalar no seu home basta executar:

curl -L http://cpanmin.us | perl - App::cpanminus

Entretanto isso ainda não configurou o seu ambiente. O cpanm foi instalado em $HOME/perl5/bin, mas seu $PATH, as variáveis de ambiente e o local::lib ainda não estão prontas.

Para instalar o módulo local::lib faça:

$HOME/perl5/bin/cpanm local::lib

Especificar o caminho completo é necessário porque ainda não adicionamos o diretório de instalação local na variável de ambiente $PATH. Para fazer isso executamos:

echo 'eval $(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib)' >> ~/.bashrc

Nota: No Mac o arquivo é o .profile ao invés do .bashrc.

Isso faz com que a cada login, o ambiente pergunte ao módulo local::lib onde estão os outros módulos. Note que desta vez não precisamos exportar a variável PERL_MM_USE_DEFAULT porque o cpanm resolve as dependências de uma forma um pouco mais esperta que o seu irmão mais velho.

Para finalizar esta etapa, feche o terminal e abra novamente para carregar as variáveis ou execute:

. ~/.bashrc

Agora, se você quiser configurar o mini repositório, os passos são os mesmos:

  1. Instalar o módulo CPAN::Mini;
  2. Criar o arquivo de configuração para ele;
  3. Executar o comando minicpan;

A instalação pode ser feita com o comando:

cpanm CPAN::Mini

O arquivo de configuração (~/.minicpanrc) pode ser criado com o conteúdo:

local: ~/minicpan
remote: http://www.cpan.org

Daí é só executar o comando minicpan e esperar o repositório ser baixado (aproximadamente 1.5 GB).

Para que o cpanm aponte para o repositório local você deve invocá-lo passando com o seguinte parâmetro extra:

cpanm --mirror ~/minicpan --mirror-only

Ou para maior conveniência criar um alias:

echo "alias cpanmm='cpanm --mirror ~/minicpan --mirror-only'" >> ~/.bashrc

Após recarregar o .bashrc você terá disponíveis os comandos cpanm que baixa os módulos diretamente da internet e o cpanmm que instala os módulos a partir do seu repositório local.

Não se esqueça de executar o comando minicpan pelo menos uma vez por semana para manter o seu repositório local atualizado.

Referências: