LoginSignup
3
2

More than 5 years have passed since last update.

古いFedoraでSoftware CollectionsのPerlを使う

Posted at

古い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

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

cpanmUnicode::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 の場所を別に明示しなければならないという、ちょっとスマートでない方法になっている。

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

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を使って、あたまが切り替えられなくて、たいへんだった…。
行の最後にはセミコロンをつけ忘れるわ、{} を書き忘れたり書き間違えたりするわ、、、

(おわり)

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2