sironekotoroの日記

Perl で楽をしたい

Perl 5.36 が出ました &(anyenv経由の)plenvでのインストール&移行方法

祝!Perl 5.36 !

ということで、初夏のはじめ頃のイベントである Perl の新規安定版リリースです。

metacpan.org

うちは(anyenv経由の) plenv で複数の Perl のバージョンを扱っているので、 plenv での作業を書いておきます。

誰のためってもちろん、来年の自分用です。

インストールできるバージョンを確認

$ plenv install -l | grep 5\.36
 5.36.0
 5.36.0-RC3
 5.36.0-RC2

インストール

$ plenv install 5.36.0

現時点で plenv がメインで使っているバージョンを確認する

$ plenv versions
  system
  5.32.0
* 5.34.0 (set by /Users/sironekotoro/.anyenv/envs/plenv/version)
  5.36.0

plenv がメインで使っているバージョンを、新しくインストールしたものに変更する

$ plenv global 5.36.0

plenv がメインで使っているバージョンが変更されていることを確認する

$ plenv versions
  system
  5.32.0
  5.34.0
* 5.36.0 (set by /Users/sironekotoro/.anyenv/envs/plenv/version)

perl のバージョンを確認する

$ perl -v

This is perl 5, version 36, subversion 0 (v5.36.0) built for darwin-2level

Copyright 1987-2022, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl".  If you have access to the
Internet, point your browser at https://www.perl.org/, the Perl Home Page.

VScode でも新規に入れた perl を利用しているか確認する

vscode で Code Runner とか入れている場合には、ちゃんと更新したバージョンで実行されているかを確認する。

marketplace.visualstudio.com

#!/usr/bin/env perl
use strict;
use warnings;

print $];   # 5.036000

この $] というのが特殊変数で、実行している perl のバージョンを返してくれる。

VScode + Code Runner でうまく動かない場合には、Code Runner の「拡張機能の設定」→「Code-runner: Executor Map」→setting.jsonperl が plenv(またはanyenv) でインストールされたものになっているか確認しておく。

ターミナルで perl -v で確認したバージョンでよければ、ターミナルで which perl として出てきたパスを設定する。

うちの場合はこんな感じ。

        "perl": "$HOME/.anyenv/envs/plenv/shims/perl",

これまで入れてきた perl のモジュールをマイグレーションする

マイグレーションと言っても以前入れていたバージョンの perl でインストールしたモジュールを移行(移動)してくるのではなく、新規バージョンの perl にモジュールを新規でインストールを行う作業。

GitHub とか 自前ソースで作ったものは移行されない模様。

都度自分でインストールする。

-n(モジュールインストール時にテストしない)つけているのは自己責任いうことで・・・

$ plenv migrate-modules -n 5.32.0 5.36.0

インストールしてきたモジュール数によっては時間がかかる。

なので寝て待つか、ゲームでもして待ちましょう。

perl のバージョンを上げてもアプリを今まで通り動かしたい

後方互換性が売りの Perl なので、大概は動きます。

ただ、モジュール関連は先の項で説明した通り入らないものもあります・・・

と、こうなって初めて Carton とか Docker のような、環境ごと切り出してくれるような技術が重要になってくるわけですね!(毎年痛感)

Perl 5.36 とまた一年

面白くやって行きましょう!