携帯からここを更新するためのプログラム mail-entry で、 POP3 周りにバグを見つけたので、作者の osho さんところにコメントで報告しました。
件の箇所では NET::POP3 の login メソッドが使われているのだけど、その返り値は
- ログインに成功したときはメールの数
- ログインに失敗したときは
undef
となっていて、メールの数が 0 のときは
"0E0" が返るようになっている。この "0E0" がミソで、ブーリアンコンテキストでは true になるけど、数値コンテキストでは 0 として扱われる値であるということをはじめて知った。なので、ログイン失敗かどうかを判断するのに
$pop3->login( $id, $passwd ) or print "login failed";とか書くだけで大丈夫だと。
C だとログイン失敗のときは -1 を返したりして、条件判定で == -1 としたり、成否のみを返り値にして成功時の値は引数で渡したポインタに代入したりするんだろうけど、 perl じゃその辺すっきりかけますねというお話。











コメントする