古いFedoraでSoftware CollectionsのPerlを使う

# 古いFedoraでSoftware CollectionsのPerlを使う

訳あって古いFedoraを使っている。
久々にPerlを使おうと思って必要なモジュールをインストールしようとしたが、簡単には導入できなかった。
Software Collection版を使って解決したので、メモ。

```shell-session
$ cat /etc/redhat-release
CentOS release 6.6 (Final)
$ which perl; perl -v
/usr/bin/perl

This is perl, v5.10.1 (*) built for x86_64-linux-thread-multi
```

（参考サイト）
[「Software Collections for CentOS 6を使おう！」 - IDCF Tech-Blog](http://blog.idcf.jp/entry/cloud/software-collections-for-centos-6/)

## モジュールインストール失敗の理由

[cpanm](http://perldoc.jp/docs/modules/App-cpanminus-1.7001/lib/App/cpanminus/fatscript.pod) で`Unicode::Japanese`をインストールしようとするがエラー。

```shell-session
$ cpanm -l local Unicode::Japanese
...
Building and testing Unicode-Japanese-0.49 ... FAIL
! Installing Unicode::Japanese failed. See /home/myhomedir/.cpanm/work/1461334556.26359/build.log for details. Retry with --force to force install it.
```

ログを見る。

```
Can't locate ExtUtils/Embed.pm in @INC (@INC contains: /home/myhomedir/local/lib/perl5/x86_64-linux-thread-multi /home/myhomedir/local/lib/perl5 /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .).
```

どうやら、モジュール `ExtUtils::Embed` が無いらしい。
なので、これを先にインストールしようと試みる。

```shell-session
$ cpanm -l local ExtUtils::Embed
skipping S/SH/SHAY/perl-5.22.1.tar.bz2
```

？
perl-5.22.1.tar.gz ?
どうやら、ExtUtilが（新しいPerlの）標準モジュールとなっており、perl-5.22をインストールしろ、ということらしい。

回避策として、新しいPerlをインストールする方法も考えられるが、いろいろ設定やら他のプログラムへの影響やら考えるのがしんどい。
また、Perlbrew も入れてない。
なので、Software Collection版を使うことにした。切り替えも楽そうなので。

## Software Collection版Perlの導入

Software Collection については、冒頭の参考サイトを参考にしてほしい。詳しく説明してある。
このバージョンのFedoraでは、perl-516が提供されているので、これをインストールする。
必要と思われるモジュールもインストールしておく。
また、（他の作業などで）必要そうなモジュールもインストールしておこう。

```shell-session
$ sudo yum search perl516    # パッケージ確認
...
perl516.x86_64 : Package that installs perl516
...(snipped)...

$ sudo yum install -y perl516
$ sudo yum install -y perl516-perl-ExtUtils-CBuilder perl516-perl-ExtUtils-Embed perl516-perl-ExtUtils-Install perl516-perl-ExtUtils-MakeMaker perl516-perl-ExtUtils-Manifest perl516-perl-ExtUtils-ParseXS
```

## Software Collection版 Perlを使う

ぼくは、`cpanm` を `/usr/local/bin/cpanm` としてインストールしている。
Software Collection版Perl(SCL版Perl)にこのパスを指し示して、`cpanm`を実行する。
モジュールは、ホームディレクトリ下の `perl516` に設置することにした。

なお、`local::lib` も合わせて入れている。この`perl516`ディレクトリを指し示すのに楽なので。

```shell-session
# --- scl へ切り替え
$ scl enable perl516 bash

# --- 環境確認
$ pwd
/home/myhomedir/
$ which perl
/opt/rh/perl516/root/usr/bin/perl
$ perl -v
This is perl 5, version 16, subversion 3 (v5.16.3) built for x86_64-linux-thread-multi
(with 25 registered patches, see perl -V for more detail)

# --- cpanm の実行
$ perl /usr/local/bin/cpanm -l local::lib
$ perl /usr/local/bin/cpanm -l perl516 Unicode::Japanese
```

インストールが終わったので簡単な動作確認。

```
$ perl -I $HOME/perl516/lib/perl5/ -Mlocal::lib=$HOME/perl516 -MUnicode::Japanese -e 'print Unicode::Japanese->new("ｵﾏｴﾓﾅｰ")->h2zKana->get, "\n"'
オマエモナー
```

## 補足

上では、`local::lib` を導入してローカルのライブラリディレクトリ群 `~/perl516/lib/perl5` を指し示した。
（目的のモジュール `Unicode::Japanese` は、`~/perl516/lib/perl5/x86_64-linux-thread-multi/` に設置されている。）

だが、local::lib 自体を `~/perl516` に導入したため、local::lib の場所を別に明示しなければならないという、ちょっとスマートでない方法になっている。

プログラムソース的には、次のようになるだろう。

```pl:sample.pl
use strict;
use utf8;
use lib qq($ENV{"HOME"}/perl516/lib/perl5);
use local::lib '~/perl516';    # ここで初めて、~/perl516/lib/perl5 以下のディレクトリ群がPERL5LIBに追加される。
use Unicode::Japanese;
```

`yum` で、perl-516版の`local::lib`が導入できればいいのだが（標準の@INCで示されるディレクトリ下に`local::lib`が設置されるであろうから）、残念ながら（まだ）ない。

## 最後に

久々にPerlを使って、あたまが切り替えられなくて、たいへんだった…。
行の最後にはセミコロンをつけ忘れるわ、`{`や`}` を書き忘れたり書き間違えたりするわ、、、

（おわり）