perlモジュール



2011 1月21日

Date::Calc – search.cpan.org

基本

use Date::Calc qw(:all);

# 今日
my ($yyyy,$mm,$dd) = Today();
print "$yyyy/$mm/$dd"; 

# 実行結果
2011/1/21

昨日の日付(日付計算)

use Date::Calc;

my ($yyyy,$mm,$dd) = Date::Calc::Today();
@y = Date::Calc::Add_Delta_Days($yyyy, $mm, $dd, -1);
my $yesterday= join('/',@y);

print "昨日=$yesterday\n";

# 実行結果
昨日=2011/1/20

Date::Calc::Add_Delta_Days($yyyy, $mm, $dd, -1);の-1を-7にすれば7日前、5にすれば5日後となる。

前月1日と月末を算出

use Date::Calc;

@y = Date::Calc::Add_Delta_YMD($yyyy, $mm, 1, 0 ,-1, 0); #前月1日
$start = join('/',@y);
@y = Date::Calc::Add_Delta_YMD($yyyy, $mm, 1, 0, 0, -1); #前月末日
$end = join('/',@y);

print "前月1日=$start\n";
print "前月末日=$end\n";

# 実行結果
前月1日=2010/12/1
前月末日=2010/12/31

Date::Calc – 日付の計算にもサンプルが。
日付の不正を確認、指定した月の日数を取得、タイムスタンプを取得など。







2011 1月11日

HTMLから本文(らしき)部分を抜き出せるとっても便利なモジュール。
HTML::Feature 3.00 リリースしました – ダウンロードたけし(寅年)の日記

オプションを指定する場合にちょいとバグがあるので修正。
CPANのバグ報告とか分からないので(汗

PATHは環境によって違うかも知れません。

/usr/lib/perl5/site_perl/5.8.8/HTML/Feature.pm

sub _setup {
    my $self = shift;
    $self->front_parser( HTML::Feature::FrontParser->new( context => $self ) );
    $self->engine( HTML::Feature::Engine->new( context => $self ) );
    # if ( !$self->{not_encode} ) { # Bug!?
    if ( !$self->config->{not_encode} ) {
        $self->{enc_type} ||= "utf8";
    }
}

/usr/lib/perl5/site_perl/5.8.8/HTML/Feature/Fetcher.pm
sub _setup {
    my $self    = shift;
    my $c       = $self->context;
    my $fetcher = LWP::UserAgent->new;
    my $config  = $c->config;
    if ( $config->{user_agent} ) {
        # $fetcher->user_agent( $config->{user_agent} ); # Bug!!
        $fetcher->agent( $config->{user_agent} );
    }






2011 1月7日

Text::Mecabがインストール出来なかった。
そういえば昔諦めた気がする。
で、エラー内容を見てみる。

# perl Makefile.PL
Path to mecab config? [/usr/local/bin/mecab-config]
detected mecab version 0.98
Using compiler flags '-I/usr/local/include -DMECAB_MAJOR_VERSION=0 -DMECAB_MINOR_VERSION=98'...
Using linker flags '-L/usr/local/lib -lmecab -lstdc++'...

Text::MeCab needs to know what encoding you built your dictionary with
to properly execute tests.

Encoding of your mecab dictionary? (shift_jis, euc-jp, utf-8) [euc-jp] utf-8
Using utf-8 as your dictionary encoding
Detected the following mecab information:
   version: 0.98
   cflags: -I/usr/local/include -DMECAB_MAJOR_VERSION=0 -DMECAB_MINOR_VERSION=98 -I src
   libs: -L/usr/local/lib -lmecab -lstdc++
   include: /usr/local/include
/root/.cpanm/work/1294395897.25225/Text-MeCab-0.20011/assertlibeiKR8srG: error while loading shared libraries: libmecab.so.1: cannot open shared object file: No such file or directory
/root/.cpanm/work/1294395897.25225/Text-MeCab-0.20011/assertlibEejMJieF: error while loading shared libraries: libmecab.so.1: cannot open shared object file: No such file or directory
wrong result: 'mecab', 'mecab'

libmecab.so.1 が見つからないらしい。
/usr/local/lib/libmecab.so.1 にインストールされている。

CentOSの標準設定ではPATHが通っていないらしいので、/usr/local/lib/ 配下のライブラリが読み込まれない様子。

で、/etc/ld.so.conf あたりをいじる必要がある。

# vi /etc/ld.so.conf

/usr/local/lib    ←最終行に追記

ldconfigを実行して、ライブラリ読み込みパスを更新。

# ldconfig 

Text::Mecab のディレクトリへ移動して手動でインストール

perl Makefile.PL
make
make test
make install






2011 1月7日

ImageMagickのインストールはyumで管理するのが一番簡単。
ただし、CentOSのImageMagickはバージョンが古い(v6.2.8)

ImageMagickのperlモジュール(PerlMagick?)はCPANでインストールすると入らないので、yumでスコッといれる。 …つづきを読む







2011 1月6日

サクっと暗号化/復号化を使いたい時に便利なperlモジュール Crypt::RC4
このモジュールでとある文字列を暗号化すると改行コードが混じる場合がある。

例えば s2525 を暗号化する。

use Crypt::RC4;
my $secret_key='1234';
my $encrypted = Crypt::RC4->new($secret_key)->RC4('s2525');
print $encrypted;

実行結果
�{�
�

$encrypted をファイルに記録したりすると、改行コードがあるため意図しないところで改行されてしまったりする。

pack/unpackして使う場合が多いと思うけど、

$encrypted =~ s/(.)/unpack('H2', $1)/eg;

としても改行コードは残ったままなのでやはり注意が必要。