カテゴリー
perlモジュール

perl でメールアドレスの有効性をチェックするモジュール

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};
}

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

以下修正後の全ソース

カテゴリー
perl perlモジュール

perl の配列処理で 標準モジュール List::Util を使う理由

以前に配列をシャッフルの記事( https://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以前には入らない

カテゴリー
perlモジュール

CPANをもっと便利に出来るコマンド cpanm – perlモジュール App::cpanminus

App::cpanminusって?

CPANをもっと簡単に使える様にするperlモジュール。
参照:
http://yellowstore.blogspot.com/2010/04/perlperlercpanminus.html

インストール

# cpan App::cpanminus

または、

cpan> install App::cpanminus

2010-12-16追記
他のインストール方法(CPANを設定しなくてもインストール出来る)
perlモジュールのinstallにcpanmを使う|perl|@OMAKASE

$ mkdir bin && cd ~/bin
$ wget http://xrl.us/cpanm
$ chmod +x cpanm

※環境によっては
$ wget http://xrl.us/cpanm --no-check-certificate
としないとダメな場合がある模様。CentOS5.5 x86_64環境では必要でした。

cpanm と合わせて local::lib も入れておくと便利です

$ cpanm local::lib

使い方

>大ブレイク中のPSGI実装Plackをインストールしてみました。

と言う事で、自分も同じものを。

# cpanm Plack
Fetching http://search.cpan.org/CPAN/authors/id/M/MI/MIYAGAWA/Plack-0.9938.tar.gz ... OK
Configuring Plack-0.9938 ... OK
==> Found dependencies: Hash::MultiValue, Try::Tiny, Test::Requires, parent, HTTP::Body, Test::TCP, Filesys::Notify::Simple, File::ShareDir, Devel::StackTrace::AsHTML
Fetching http://search.cpan.org/CPAN/authors/id/M/MI/MIYAGAWA/Hash-MultiValue-0.08.tar.gz ... OK
Configuring Hash-MultiValue-0.08 ... OK
Building and testing Hash-MultiValue-0.08 for Hash::MultiValue ... OK
Successfully installed Hash-MultiValue-0.08
Fetching http://search.cpan.org/CPAN/authors/id/N/NU/NUFFIN/Try-Tiny-0.06.tar.gz ... OK
Configuring Try-Tiny-0.06 ... OK
Building and testing Try-Tiny-0.06 for Try::Tiny ... OK
Successfully installed Try-Tiny-0.06
Fetching http://search.cpan.org/CPAN/authors/id/T/TO/TOKUHIROM/Test-Requires-0.05.tar.gz ... OK
Configuring Test-Requires-0.05 ... OK
Building and testing Test-Requires-0.05 for Test::Requires ... OK
Successfully installed Test-Requires-0.05
Fetching http://search.cpan.org/CPAN/authors/id/C/CO/CORION/parent-0.223.tar.gz ... OK
Configuring parent-0.223 ... OK
Building and testing parent-0.223 for parent ... OK
Successfully installed parent-0.223
Fetching http://search.cpan.org/CPAN/authors/id/M/MR/MRAMBERG/HTTP-Body-1.07.tar.gz ... OK
Configuring HTTP-Body-1.07 ... OK
==> Found dependencies: IO::File, Test::Deep
Fetching http://search.cpan.org/CPAN/authors/id/G/GB/GBARR/IO-1.25.tar.gz ... OK
Configuring IO-1.25 ... OK
Building and testing IO-1.25 for IO::File ... OK
Successfully installed IO-1.25 (upgraded from 1.13)
Fetching http://search.cpan.org/CPAN/authors/id/F/FD/FDALY/Test-Deep-0.106.tar.gz ... OK
Configuring Test-Deep-0.106 ... OK
==> Found dependencies: Test::NoWarnings
Fetching http://search.cpan.org/CPAN/authors/id/A/AD/ADAMK/Test-NoWarnings-1.01.tar.gz ... OK
Configuring Test-NoWarnings-1.01 ... OK
Building and testing Test-NoWarnings-1.01 for Test::NoWarnings ... OK
Successfully installed Test-NoWarnings-1.01
Building and testing Test-Deep-0.106 for Test::Deep ... OK
Successfully installed Test-Deep-0.106
Building and testing HTTP-Body-1.07 for HTTP::Body ... OK
Successfully installed HTTP-Body-1.07
Fetching http://search.cpan.org/CPAN/authors/id/T/TO/TOKUHIROM/Test-TCP-0.16.tar.gz ... OK
Configuring Test-TCP-0.16 ... OK
==> Found dependencies: Test::SharedFork
Fetching http://search.cpan.org/CPAN/authors/id/T/TO/TOKUHIROM/Test-SharedFork-0.11.tar.gz ... OK
Configuring Test-SharedFork-0.11 ... OK
Building and testing Test-SharedFork-0.11 for Test::SharedFork ... OK
Successfully installed Test-SharedFork-0.11
Building and testing Test-TCP-0.16 for Test::TCP ... OK
Successfully installed Test-TCP-0.16
Fetching http://search.cpan.org/CPAN/authors/id/M/MI/MIYAGAWA/Filesys-Notify-Simple-0.06.tar.gz ... OK
Configuring Filesys-Notify-Simple-0.06 ... OK
Building and testing Filesys-Notify-Simple-0.06 for Filesys::Notify::Simple ... OK
Successfully installed Filesys-Notify-Simple-0.06
Fetching http://search.cpan.org/CPAN/authors/id/A/AD/ADAMK/File-ShareDir-1.02.tar.gz ... OK
Configuring File-ShareDir-1.02 ... OK
==> Found dependencies: Class::Inspector
Fetching http://search.cpan.org/CPAN/authors/id/A/AD/ADAMK/Class-Inspector-1.24.tar.gz ... OK
Configuring Class-Inspector-1.24 ... OK
Building and testing Class-Inspector-1.24 for Class::Inspector ... OK
Successfully installed Class-Inspector-1.24
Building and testing File-ShareDir-1.02 for File::ShareDir ... OK
Successfully installed File-ShareDir-1.02
Fetching http://search.cpan.org/CPAN/authors/id/M/MI/MIYAGAWA/Devel-StackTrace-AsHTML-0.09.tar.gz ... OK
Configuring Devel-StackTrace-AsHTML-0.09 ... OK
Building and testing Devel-StackTrace-AsHTML-0.09 for Devel::StackTrace::AsHTML ... OK
Successfully installed Devel-StackTrace-AsHTML-0.09
Building and testing Plack-0.9938 for Plack ... OK
Successfully installed Plack-0.9938

簡単ですね。

カテゴリー
PayPal perlモジュール

PerlでPayPal エクスプレスチェックアウトAPIのLandingPageオプションを使う

Perlモジュール Business::PayPal::API

PayPalのAPIを使う時は Business::PayPal::API というモジュールが便利。

先日のエントリー PayPal利用時の決済フローを考える でLandingPageオプションの事を書いたのですが、Business::PayPal::API で実装するとそのままでは利用出来ないので、Business::PayPal::API::ExpressCheckout のソースを変更する必要があります。

PayPalの英語版APIの解説書(PDF)にはLandingPageの記載が無いようでしたので日本独自の仕様なのでしょうか??変更方法は簡単です。
パスは自分の環境ですと
/usr/lib/perl5/site_perl/5.8.5/Business/PayPal/API/ExpressCheckout.pm でした。

カテゴリー
perlモジュール

OpenIDを使う為のPerlモジュールをインストール

以下の順でインストールするとうまくいくらしい。

Math::BigInt
Math::BigInt::GMP
Crypt::DH
Net::OpenID::Consumer

Net::OpenID::Consumerをインストール時にXML::Simpleが足りなかったので先にインストールした。

参考:http://www.atmarkit.co.jp/fsecurity/rensai/openid03/openid01.html

関連:
Net::OpenID::Consumer::Lite
http://d.hatena.ne.jp/tokuhirom/20081129/1227923235
用途を限定的にした OpenID 認証機構

Crypt::DH::GMP
http://mt.endeworks.jp/d-6/2008/04/crypt-dh-gmp.html
Crypt::DH の処理が遅いため libgmp を使って高速化