古いFedoraでSoftware CollectionsのPerlを使う
訳あって古いFedoraを使っている。
久々にPerlを使おうと思って必要なモジュールをインストールしようとしたが、簡単には導入できなかった。
Software Collection版を使って解決したので、メモ。
$ 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
モジュールインストール失敗の理由
cpanm でUnicode::Japanese
をインストールしようとするがエラー。
$ 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
が無いらしい。
なので、これを先にインストールしようと試みる。
$ 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が提供されているので、これをインストールする。
必要と思われるモジュールもインストールしておく。
また、(他の作業などで)必要そうなモジュールもインストールしておこう。
$ 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
ディレクトリを指し示すのに楽なので。
# --- 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 の場所を別に明示しなければならないという、ちょっとスマートでない方法になっている。
プログラムソース的には、次のようになるだろう。
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を使って、あたまが切り替えられなくて、たいへんだった…。
行の最後にはセミコロンをつけ忘れるわ、{
や}
を書き忘れたり書き間違えたりするわ、、、
(おわり)