この記事は参考記録なので、もしも読んだ方が同じエラーを抱えており模倣する場合は自己責任で。というのも、表面的な応急措置をしただけで、きちんとした原因究明やデバッグなどはしていない。

 自前運用のメールサーバでspamassassinを便利に使わせて頂いている。spamassassinでは、受信したメール内容からスパムメール判定基準を学習するために定期実行するsa-learnというコマンドがあるのだが、このコマンドをcronで仕掛けて動かしていると、あるときから

Argument "" isn't numeric in numeric gt (>) at /usr/share/perl5/vendor_perl/Mail/SpamAssassin/HTML.pm line 497.

というエラーが生じるようになった。

 エラーメッセージを示すソースコードをみてみる。久々のPerl。当該行のコードはこうだ。

                elsif ($rgb[$i] > 255) {

 前後のコードを斜め読み。ものすごくアバウトにしか調べていないが、どうやらHTMLメールを解析する際に、color指定のバリエーションの一つであるrgb(xx,yy,zz)を文字列解析しようとしてxx,yy,zzが数値ではないケース(空文字列)があったために比較条件の型不一致による警告となっている。

 とりあえず、

                elsif ($rgb[$i] !~ /^[0-9]+$/) {
                  $rgb[$i] = 0;
                }
                elsif ($rgb[$i] > 255) {

という感じで判定を手前に追加し、数値じゃないときは0にしちゃう。いちおうこれで当該エラーは解消。

 spamassassinは学習も含めた判定基準の設定がきめ細かくて、どこまで有効に働かすことができているのかを掌握できていないが、自動的にJunk行きになるメールも時間経過とともに変化はあるようだし、まあ使わないよりは使ったほうが良いかなという定性的な感想はある。

 ただ最近の添付つき日本語テキストのスパムメールはけっこう素通りすることが多く、スパムメールとの戦いは本当に過去からずっとイタチごっこである。
 実例として、ごく最近、るるぶトラベルの偽装メールがあった。仕事でメール運用などをお手伝いしているお客様でもけっこう同様のメールがあったようだ。
このとき、情報が早かったのはTwitterだった。

 そのうち、Twitterタイムラインなどに湧き出す発信をAIが判断して、スパムメールかどうかを決める、なんてことも出てくるかも知れない。
 群衆の発する、叡智かゴミか分からない情報から、AIが叡智を拾い出す。
 これに限らず、十年前に夢想していた色々なことがAIの勃興で実現されていくのだろう。長生きするモチベーションとしては十分ではないにせよ、悪くない。

ookawara@lx1:~$ cat a.pl
$s = "ABC";
$s =~ s/A//;
print "Match=$&\n";
$s = "BBC";
$s =~ s/A//;
print "Match=$&\n";
ookawara@lx1:~$ perl -f ./a.pl
Match=A
Match=A
そうなんだ・・・

さくらインターネットのレンタルサーバ(スタンダード)は安価で割と自由度が高く、総じて良さげなのですが、PHPは4だったりして、PHPってXML関係が4と5で違っていたりするし、そもそもPHP4ってもうアレでしょ?ってことで、やっぱ小ネタプログラムはPerlで書くことにし、CPANを入れました。

(因みにPerlのバージョンは v5.8.8 built for i386-freebsd-64int です)

参考にしたのは以下のURL。ほぼそのまんまでOK。
ユーザー領域にCPANをインストールする方法(2006年11月05日 otsune’s FreeBSD memo

sshでログイン。
%mkdir ~/local
%echo no | cpan
%vi ~/.cpan/CPAN/MyConfig.pm
MyConfig.pmの以下を書き換え。(mbuildpl_argの項目は存在しないので、追記)

‘make_install_arg’ => qq[SITEPREFIX=$ENV{HOME}/local],
‘makepl_arg’ => qq[INSTALLDIRS=site LIB=$ENV{HOME}/local/lib/perl5 PREFIX=$ENV{HOME}/local],
‘mbuildpl_arg’ => qq[./Build –install_base $ENV{HOME}/local],
‘urllist’ => [q[ftp://ftp.cpan.jp/], q[ftp://ftp.kddilabs.jp/CPAN/]],

%vi .cshrc.cshrcに以下を追記。

setenv PATH $HOME/local/bin:$PATH
setenv PERL5LIB $HOME/local/lib/perl5:$HOME/local/lib/perl5/site_perl

setenv PKG_DBDIR $HOME/local/var/db/pkg
setenv PORT_DBDIR $HOME/local/var/db/pkg
setenv INSTALL_AS_USER
setenv LD_LIBRARY_PATH $HOME/local/lib

%source .cshrc
%mkdir -p ~/local/var/db/pkg
%cpan -i Bundle::CPAN
あとはCPAN更新のスクリプトが延々実行されるなか、聞かれる質問に「y」とかテキトーに答えて、とりあえず完了。

さっそく「メールでWikipedia」を書き換えることにします。