perlでEvernoteのAPIを使うときに'Missing version identifier'で怒られた
とある目的でperlからEvernoteのAPIを使う必要にかられて挑戦してみたところ、'Missing version identifier'でUserStore->checkVersionが異常終了して困ってた。環境を変えて調べてみると、Mac OS X上にperlbrewで作ったperl 5.14.2環境ではうまくいかなくて、FreeBSD環境だとうまくいく。
例外の内容はこんなかんじ。
$VAR1 = bless( { 'code' => 0, 'message' => 'Missing version identifier' }, 'Thrift::TException' );
よくよく考えると、Evernote APIはThrift::HttpClient経由でlibwwwを使うんだけど、アクセス先がhttpsだった。Mac OS X上では、libwwwをhttps対応させてなかったのが原因だ。というわけで、Crypt::SSLeayとLWP::Protocol::httpsを追加でインストールして解決した。
FreeBSD portsだとMakefileの以下の記述により、OPTIONS SSLを有効にしていればSSL対応になるので、最初は気づかなかったよ。
.if defined(WITH_SSL) RUN_DEPENDS+= p5-Crypt-SSLeay>=0:${PORTSDIR}/security/p5-Crypt-SSLeay \ p5-LWP-Protocol-https>=0:${PORTSDIR}/www/p5-LWP-Protocol-https .endif