cpanを使ってみる

そんなわけで、軽くcpanを使って、モジュールを入手してみましょう。
わかりやすいところで、XML::DOMのインストールをしてみます。

手始めにこんなスクリプトを書いてみました。

#!/usr/bin/perl
use utf8;
use strict;
use warnings;
use XML::DOM;


my $a_parser = new XML::DOM::Parser;
my $a_doc = $a_parser->parsefile( $ARGV[0] );
my $a_root_el = $a_doc->getFirstChild();

my @a_node_list = $a_root_el->getElementsByTagName( 'msg' );

foreach my $a_msg_el ( @a_node_list ){
my $a_text = $a_msg_el->getFirstChild();
print $a_text->getData() . "\n";
}

こんなxmlファイルを食わすと、msgタグに入っているテキストを表示するスクリプトです。


this is cpan test.
:)

...スクリプトには意味が無いけど...

で、実行してみると、当然"Image::Magick"なんて言うパッケージが見つからんので、
@INCを使って、検索パスの指定をしとけやっておこられる訳です。

早速ルートになってから、cpanのシェルをたちあげます

# cpan -MCPAN -e 'shell'

プロンプトが、

cpan>

こんな風に変化します。

今は、Image::Magickってパッケージ名がわかっているんですけど、とりあえずは検索
してみることにします

cpan> i /XML::DOM/

こんな感じで正規表現を使って、検索を行ってくれます

そしてインストール

cpan> install XML::DOM

インストールを進めてみると、テストが動いて正しくインストールが行われたかの結果が出力されます。

今回の手順でインストールを進めると、恐らくテストに失敗しているはずです。
なんか、必要なライブラリとかがあったようなので、bashに戻って、必要そうなライブラリをインストール
することにしました。

# aptitude install libxml-perl

でもって、cpanシェルから再度XML::DOMパッケージのインストールを行います。

# perl -MCPAN -e 'shell'
cpan> install XML::DOM

今度はうまくテストにパスしたようなので、最初に書いておいたスクリプトを動かしてみます。

正しく、

this is cpan test.
:)

こんな感じに出力されていれば、無事モジュールのインストールが行えたってことですよね。

○ [補足1] cpanモジュールのインストール先

...最初にcpanを使ってモジュールをインストールしたときに、libxml-perlがなくって
インストールに失敗した訳ですが、そのときに「cpanってどこにモジュールをインストールすんだ?」
ってなことを疑問に思いました。

そんなわけで、インストールが終わった後、こんな感じで調べてみました

# cd /
# find . -name DOM.pm

なんか、"/usr/local/share/perl/5.8.8/XML/DOM.pm"に入っているみたいですね。

○ [補足2] apt-cache

libxml-perl のインストールをするときに、apt-cacheにお世話になりました。
こいつを使うと、aptパッケージの検索を行うことができます

# apt-cache search libxml

こいつの一覧を見て、libxml-perlの存在を知った訳です。

○ [補足3] Image::Magick

最初は、cpanからImage::Magickのインストールをしてみようかと考えました。
(XML::DOMを使うよりは、派手な感じがするじゃない:p)

でもって、

cpan> install Image::Magick

ってインストールを進めたんですけど、テストに失敗してしまいました。
恐らく、ImageMagick本体orライブラリが足りないんだろうと思って、apt-cacheを
使ってパッケージ検索していたら、まんま perlmagick を見つけてしまいました。

そんな訳で、

# aptitude install perlmagick

ってしてあげたら、cpan使うまでもなく、Image::Magickモジュールが使えるように
なりました。

...サンプルコードまで書いてみたのに(^^;;;

くやしいので、さらしておくとこんなスクリプトを書いてみました。

#!/usr/bin/perl
use utf8;
use Image::Magick;

my $a_img_file = $ARGV[0];
my $a_new_file = $ARGV[1];

my $a_img = new Image::Magick();
$a_img->Read( $a_img_file );
$a_img->Resize( width => 120, height => 120 );
$a_img->Write( $a_new_file );

○ 参考文献

プログラミングPerl〈VOLUME2〉

プログラミングPerl〈VOLUME2〉

なんだかんだ言っても、らくだ本は必須なんだと思いました。
なにより、読み物として面白いし。
(ちゃんと読み終わったらレビューを別に書く)