Parse::AccessLogEntry::Accessor
CPAN に Parse::AccessLogEntry::Accessor なるモジュールをアップしました。しかも、CPAN に初アップです!!やったね。なので、モジュールの説明などをちょこちょこと。
使い方はこんな感じ
下のサンプルだと、ホスト名と時間をアクセサを使って取り込んで表示してるだけです。
#!/usr/bin/perl use strict; use warnings; use Parse::AccessLogEntry::Accessor; my $LOGFILE = 'access.log'; my $parser = Parse::AccessLogEntry::Accessor->new; open my $fh, '<', $LOGFILE or die; while (my $line = <$fh>) { chomp $line; $parser->parse($line); print $parser->host(), $parser->time(), "\n"; } close $fh;
個人的に、Parse::AccessLogEntry をよく使ってて、アクセサがあればなと思って作っちゃいました。よければ使っていただいて、意見等いただければと思います。
あとはモジュールの管理をどうするか。CodeRepos にアカウントをもらうのがいい気もします。
CPAN::Mini入れてみた
CPANミラーをローカルに作れる、CPAN::Miniを今更ながら入れてみた。めちゃくちゃうれしいところは、こんな感じっすかね。
- 飛行機や地下鉄といったオフラインな所でもCPANモジュールをごりごり入れられる
- ダウンロードする手間が無い分だけインストールも早い
インストールの仕方はめちゃ簡単です。CPANからCPAN::Miniを入れるだけ。
cpan> install CPAN::Mini
インストールに成功すると、minicpanというコマンドが付属してくる。これを使って、CPANミラーをローカルに作ったりします。こんな感じで実行。
% minicpan -r http://ftp.yz.yamagata-u.ac.jp/pub/lang/cpan/ -l ~/minicpan
CPANシェルからインストールするために、urllistに追加しておきます。*1
cpan> o conf urllist unshift file:///home/amari3/minicpan cpan> o conf commit
あとは、cronか何かで一日一回同期しておくと良いです。
ちなみに、初回起動時は30分くらい処理に時間がかかるので注意!
CPAN モジュールを deb パッケージ化
CPAN モジュールを dpkg とか aptitude でインストールできるように deb パッケージ化してみる。
まずは、CPAN モジュールを deb パッケージにするために必要なコマンド、dh-make-perl をインストールする。
# aptitude install dh-make-perl
dh-make-perl の使い方はこんな感じ。--notest オプションを付けるとテストをスキップしてくれますが、個人的にはおすすめ出来ないです。
# dh-make-perl --cpan モジュール名 --build
別に root じゃなくても実行できるけど、一般ユーザだとこけるときもあるので、root で実行するのをおすすめします。
とりあえず例として、Readonly モジュールを deb パッケージ化してみる。
# dh-make-perl --cpan Readonly --build
実行後、成功すると以下のファイルが出来上がるので、dpkg なり aptitude でインストールすることができる。(aptitude でインストールするときは、sign したりする必要がある。ここでは割愛します)
libreadonly-perl_1.03-1_all.deb
依存パッケージがあったりする場合には、--depends オプションを使ってパッケージを指定する。(XML::XPathEngine で説明。特に意図はないです)
# dh-make-perl --cpan XML::XPathEngine --build --depends 'libmodule-install-perl (>= 0.64-1)'
僕が考える、deb パッケージ化するメリットは、
- サーバが Debian の場合インストールするのが容易になる
- 商用で使う場合で問題になりがちな、バージョンの差異をなくすことができる
あと、デメリットも、
- そもそも deb パッケージにするのが面倒くさい
- 依存関係を自動で解決してくれない(自分で --depends オプションを指定する必要有)
メリットの2が個人的には大きいと思いますが、デメリットの2が大きくのしかかってきます。これを自動化できるようなスクリプトを書くと幸せになれるかもと思います。
CGI::Application::Plugin::Redirectではまった
CGI::Application::Plugin::Redirectではまった。といってもインストールでの話し。
ちょい古い環境(Perl 5.6.1な環境)に、いつもどおりcpanからCGI::Application::Plugin::Redirectを入れようとしたんやけど、make testでエラーが出て一日くらいはまる。
エラーの内容は正規表現のテストで、マッチングしないというやつ。合計3箇所出てあせあせ。
Location: http://***
といった文字列とのマッチングのテストがあるんやけど、
location: http://***
という文字列とのマッチングとなってて、常にテストが失敗するように。
原因は、CGI.pmのredirectメソッドの返り値が変更されてて(多分そう思う)、CGI.pmのバージョンを上げることで解決。
Perl 5.8系とか5.10系だとCGI.pmのバージョンが高いので、はまることは無いと思う。また、バッドノウハウが増えちゃいましたね。
YAPC Asia 2008のチケット買った
今年もやってきた。Perlの祭典http://conferences.yapcasia.org/ya2008/のチケットが今日から販売だったので購入。
去年は二日目が、急性腸炎で行けなくてがっかりしたのを覚えてます。今年はしっかり体調も万全にして、二日間堪能してやるぞ!
全世界のPerlハカーに会えると思うと、今からわくわく、そわそわしてきますな。