perl



2010 7月28日

GD のインストールに散々悩んだあげく、あきらめかていたけど、
http://tech.hitsug.net/?CentOS%2FPerlモジュール
このページに rpmforge レポジトリを使った yum でのインストールが載っていたので試したら一発で出来た。。。

yum --enablerepo=rpmforge install perl-GD

いろいろな要因があるのだろうけど。







2010 7月2日

Email::Valid

http://search.cpan.org/~rjbs/Email-Valid-0.184/lib/Email/Valid.pm

現在でも更新されている感じのモジュール。携帯向けに Email::Valid::Loose と言うモジュールもある(有名なMIYAGAWAさん作)通常ならばこのモジュールでいいと思う。

Mail::CheckUser

http://search.cpan.org/~ilyam/Mail-CheckUser-1.21/CheckUser.pm

Data::Dumper の作者らしい。18 Sep 2003 となっているので更新はだいぶ前。でもこのモジュールはなかなか良くて、存在ユーザーをある程度(?)調べてくれる。存在ユーザーのチェックは送信先のメールサーバの設定によって違うのかもしれない。ソースに
## gTLD Wildcard IPs
$NXDOMAIN= {………}
って感じでトップレベルドメイン(?)のAレコードやらCNAMEと思われるものが定義されているけど、これって更新されないのかなぁ?

で、こちらのモジュールでは携帯向けのアドレスで @ の前に . が付くもの(abc..@docomo.ne.jp など)は使えません。RFC822違反だそうです。

そこで Mail::CheckUser::Loose なるモジュールを作成・・・した訳ではないけど、リメイクして使いました。

自分の環境では /usr/lib/perl5/site_perl/5.8.5/Mail/CheckUser.pm でしたので、/usr/lib/perl5/site_perl/5.8.5/Mail/CheckUser と言うディレクトリを作り、その中に CheckUser.pm をコピペして Loose.pm にリネーム。

その Loose.pm を数カ所変更するだけです。

7行目付近

package Mail::CheckUser;
↓ ::Loose を追記
package Mail::CheckUser::Loose;

190行目付近

sub last_check() {
    return $Mail::CheckUser::Last_Check;
}
↓ ::Loose を追記
sub last_check() {
    return $Mail::CheckUser::Loose::Last_Check;
}

214行目付近

my $STRING_RE = ('[' . quotemeta(join '',
                                 grep(!/[<>()\[\]\\\.,;:\@"]/, # ["], UnBug Emacs
                                      map chr, 33 .. 126)) . ']');
↓ \. を削除
my $STRING_RE = ('[' . quotemeta(join '',
                                 grep(!/[<>()\[\]\\,;:\@"]/, # ["], UnBug Emacs
                                      map chr, 33 .. 126)) . ']');

244行目付近

    my $resolver = $Mail::CheckUser::Net_DNS_Resolver || new Net::DNS::Resolver;
↓ ::Loose を追記
    my $resolver = $Mail::CheckUser::Loose::Net_DNS_Resolver || new Net::DNS::Resolver;

スキル不足で継承とかよくわからないので(汗

use Mail::CheckUser::Loose;
my $check_email='h.o.g.e.@docomo.ne.jp';

$Mail::CheckUser::Loose::Timeout = 15;
$Mail::CheckUser::Loose::Treat_Timeout_As_Fail = 'true';

if(check_email($check_email)) {
    print "有効なアドレスです。";
}else {
    print "無効なアドレスです。",last_check()->{reason};
}

こんな感じで使ったりしてます。

以下修正後の全ソース

..Continue reading..







2010 7月1日

以前に配列をシャッフルの記事( http://perl.no-tubo.net/2010/01/08/pelrで配列をシャッフル/ )を書いたのだけれど、その時にコメントで List::Util を使いましょうよ、と頂いた。

そういうものもあるのか、と思っていたのだけれど理由があったので軽く調べてみた。

perl を書く時には配列処理と言うのはよく使うので、メモとしてエントリー。

配列処理をするモジュール List::Util

配列処理に置いて同じような処理は自前で書いても書けない事は無い。ただし、コアモジュール List::Util は C(XS) で実装されている(?)ので多量の処理になるほど実行速度に差が出る。

ベンチマークをとって比較しているエントリー
配列のしゃほぅ!のベンチマーク

上記エントリーにはシャッフルのベンチマークのみだけど、きっと他の処理でも違いがあるのだろう。

もっとたくさんの処理を使える List::MoreUtils

List::MoreUtils を使うとさらに多くの配列処理を使用出来る。
簡単なリファレンス
List::MoreUtils – List::Utilに含まれない関数群 – あじゃぱー

インストールに関して注意点があるようです。
YellowStore: [Perl]List-MoreUtils-0.24はPerl5.8.8以前には入らない