🐫

cpmを使ってPerlモジュールをlocalで試せるように

2022/03/04に公開

これはなに

現在、Perlのプロダクトを別言語へのリプレイスを行っています。
Perlのモジュールの挙動が試せる環境がほしかったので、試しにcpmを利用してみました。

今回はcpmを利用してモジュールをインストールし、perlスクリプトで利用するところまでを備忘録として書きます。

cpm

https://github.com/skaji/cpm

cpmはcpanmをより早くしたモジュールインストーラーです。
モジュール同士の依存関係の解決をcpanmを並列に稼働させて高速に実現しているようです。

Perlのバージョン

  • 5.30.3

cpmインストール

$ mkdir sample
$ cd sample
$ curl -fsSL https://git.io/cpm > cpm
$ chmod +x cpm
$ ./cpm --version

モジュールインストール

試しにString::Randomモジュールをインストールします。

String::Randomモジュールは文字通りランダムな文字列を生成するモジュールです。
正規表現を使って生成する文字列の構造を指定できます。

$ ./cpm install String::Random
DONE install Module-Build-0.4231 (using prebuilt)
DONE install String-Random-0.32 (using prebuilt)
2 distributions installed.

モジュールのインストールが完了し、localディレクトリが作成されます。
./local/lib/perl5/にインストールしたモジュールが置かれます。

$ tree -L 5
.
├── cpm
└── local
    ├── bin
    │   └── config_data
    └── lib
        └── perl5
            ├── 5.30.3
            │   └── darwin-thread-multi-2level
            ├── Module
            │   ├── Build
            │   └── Build.pm
            ├── String
            │   └── Random.pm
            └── darwin-thread-multi-2level
                └── auto

モジュールを利用する

インストールしたString::Randomを使って
かんたんな文字列を生成するファイルを作成します。

./random.pl
use strict;
use warnings;
use String::Random;

my $generator = String::Random->new();
my $string = $generator->randregex('\d{5}'); # generate 5 random digits
print "string: $string\n";

perlコマンドでincludeオプションを使ってplファイルを実行します。

$ perl -I $PWD/local/lib/perl5 random.pl
string: 97263

lib, FindBin::Binを利用した呼び出し方

毎回includeコマンドを実行するのが面倒な場合、
標準モジュールのlibFindBinを利用することでオプションを省略できます。

./random.pl
use strict;
use warnings;
use FindBin;                              # 追加
use lib "$FindBin::Bin/local/lib/perl5";  # 追加
use String::Random;

my $generator = String::Random->new();
my $string = $generator->randregex('\d{5}'); # generate 5 random digits
print "string: $string\n";

perlコマンドの実行がシンプルになりました。

$ perl random.pl
string: 96416

libモジュール

Perlモジュールの検索先に指定したパスを追加出来るモジュールです。
モジュールを検索する時、こちらで追加したパスが一番最初に検索されるようになります。

https://perldoc.perl.org/5.30.3/lib

FinBinモジュール

https://perldoc.perl.org/5.30.3/FindBin

実行されたスクリプトのディレクトリパスを取得することが出来るモジュールです。
$FindBin::Binという特殊な変数にでディレクトリのパスが格納されています。

参考

こちらの記事を参考にさせてもらいました

Discussion