■2007-12-07
* [Perl][近況] 新バージョンのText::CSV
私、春頃にText::CSVの新しいメンテナになったのですが、先日ようやくバージョン0.1から1.0にアップしました。
何が変わったかというと、今まで単体で動作してたのをやめて、Text::CSV_XSかText::CSV_PPに処理を移譲するようにしました。(今後Text::CSV_PPはText::CSVに同梱)
Text::CSVといえばASCIIキャラしか扱えなかったため、マルチバイトで利用しようと思ったらこれまではText::CSV_XSかText::CSV_PPを使うというのが定番だったかと思います。新バージョンはデフォルトでText::CSV_XSを利用します。そしてText::CSV_XSがインストールされていなければバンドルされているText::CSV_PPを利用します。
というわけで、今後はText::CSVをインストールするだけでText::CSV_XSと同等の処理ができるようになり、さらにText::CSV_XSがインストールされていればスピードも早くなるという寸法です。
CPANモジュールでText::CSV_XSないしText::CSV_PPを利用されている方がいらっしゃいましたら、ぜひText::CSVへの切り替えをご検討ください。
* [Perl][近況] CPANのJSONもバージョンアップ
なお、近々JSONの新バージョンを出しますが、こちらも同様にJSON::XSかJSON::PPに処理をさせるようになります。
Perlライクな命名でないと一部で評判の悪かった関数jsonToObjやobjToJsonはobsoletedします。$JSON::AUTOCONVとかの変数も全部無くなるよ! というか旧バージョンと全く互換性が無くなるの。
* [Perl][雑感] JSON::PPのround-trip
これみてたら、メモしておきたくなったので。 JSON::XSはPerlの数値1と文字列"1"に応じてJSONへの変換を分けているのですが、これをJSON::PPで実装するのに
my $b_obj = B::svref_2object(\$value); my $flags = $b_obj->FLAGS; return $value if ( ( $flags & B::SVf_IOK or $flags & B::SVp_IOK or $flags & B::SVf_NOK or $flags & B::SVp_NOK ) and !($flags & B::SVf_POK ) ); # SvTYPE is IV or NV? ....
てなことをやってたり。以前はこんな風に生の値でやってたんですが、Perl 5.9.4とかで値が変わってたりもするので今はB::*使ってます。Perl 5.005だと無かったりしますが(なので自分でガシガシ書いておく)。