Instalando uma versão específica de Perl com o plenv

Perl é uma linguagem multiparadigma, multiplataforma e extremamente flexível, que vem instalada por padrão em todo sistema baseado em Unix, ou seja, Linux e Mac OSX.

Esses sistemas dependem fortemente da linguagem para tarefas internas e algumas vezes nem dão boot se as versões corretas de alguns módulos não estiverem disponíveis.

Portanto a melhor alternativa para desenvolver em Perl é configurar um ambiente de desenvolvimento à parte, com uma versão da linguagem separada da que o sistema utiliza.

Historicamente tivemos várias formas de fazer isso mas hoje a mais indicada é compilar e instalar a linguagem num diretório local do usuário com a ferramenta plenv.

Recomendo visitar os site do projeto para obter as instruções mais atualizadas. Abaixo reproduzo o passo a passo traduzido pra quem tiver dificuldade com o inglês.

Antes de começar

Como vamos baixar, compilar e instalar tanto a linguagem Perl como os módulos a partir de seus códigos-fonte, você vai precisar ter as ferramentas de desenvolvimento padrão instaladas.

No ubuntu isso é feito instalando o pacote build-essential.

Além disso, você também vai precisar do git instalado.

user@host$ sudo apt update && sudo apt install -y build-essential git
Hit:1 http://security.ubuntu.com/ubuntu focal-security InRelease
Hit:2 http://archive.ubuntu.com/ubuntu focal InRelease
... várias linhas depois...
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
user@host$

Instalando o plenv

O processo de instalação consiste basicamente em baixar dois repositórios via git e configurar as variáveis de ambiente corretas para encontrá-los.

Primeiramente baixe o repositório do próprio plenv:

user@host$ git clone https://github.com/tokuhirom/plenv.git ~/.plenv

Esse comando vai clonar o repositório do plenv pra dentro do diretório ~/.plenv, ou seja, um diretório escondido no seu diretório $HOME.

Em seguida você deve adicionar dois comandos na configuração do seu terminal. Um que adiciona o diretório do plenv ao seu $PATH, para que os comandos dele fiquem disponíveis. O outro é um comando para inicializar o plenv toda vez que você abrir um novo terminal:

user@host$ echo 'export PATH="$HOME/.plenv/bin:$PATH"' >> ~/.bash_profile
user@host$ echo 'eval "$(plenv init -)"' >> ~/.bash_profile

Note que o arquivo de configuração é diferente dependendo da shell que você está usando. No meu caso, como eu uso o zsh o meu arquivo é o ~/.zshrc. Para saber qual a shell que você está utilizando, verifique a variável $SHELL no seu terminal:

user@host$ echo $SHELL
/bin/zsh
user@host$

Reinicie o terminal e a configuração do plenv estará quase pronta.

Ainda falta instalar o perl-build, que adiciona o comando plenv install, que facilita a instalação de novas versões da linguagem.

user@host$ git clone https://github.com/tokuhirom/Perl-Build.git ~/.plenv/plugins/perl-build/

Por último atualize os executáveis. Isso precisa ser feito toda vez que você instalar uma nova versão do Perl ou qualquer módulo que adicione um comando como o cpanm, por exemplo:

user@host$ plenv rehash

Principais comandos

O plenv possui muitos comandos interessantes que você pode utilizar para executar versões específicas da linguagem para cada aplicação, configurar uma versão diferente por diretório e por aí vai. Abaixo eu listo os principais comandos que eu utilizo no meu dia a dia.

Listar todas as versões disponíveis para instalar

user@host$ plenv install --list
Available versions:
5.33.1
5.33.0
5.32.0
... muitas linhas depois...
5.6.0
5.5.670
5.003_13
user@host$

Instalar uma nova versão da linguagem

user@host$ plenv install 5.32.0

Listar versões instaladas

user@host$ plenv versions
system
5.30.1
* 5.30.2 (set by /home/blabos/.plenv/version)
user@host$

Configurar uma versão como padrão

user@host$ plenv global 5.30.2

Bonus point: cpanm e carton

Duas ferramentas que você vai utilizar muito são o cpanm, que é o instalador de módulos Perl, e o carton, que é o gerenciador de dependências padrão que a gente usa nos nossos projetos.

O plenv possui um comando pra agilizar a instalação do cpanm:

user@host$ plenv install-cpanm

Com o cpanm instalado, instale o carton com o seguinte comando:

user@host$ cpanm Carton

Note que os módulos instalados desta maneira são completamente independentes dos módulos instalados por outra versão. Se você instalar e ativar outra versão da linguagem, vai precisar instalar os módulos novamente.

Isso acontece porque alguns módulos Perl tem partes escritas em linguagem C que precisam ser compiladas junto com a versão específica da linguagem que eles vão utilizar.

Lembre-se também de atualizar os executáveis repetindo o comando:

user@host$ plenv rehash