とりあえず含蓄は後回しにして、以下同感。
ああこの変数は真偽値として扱ってるけど boolean というのはないんだったと JSON::XS::true とか使うんだけど、だんだんそれを変換するのが面倒になって、どうせ JSON 使うだろと思って横着して MyApp::true = JSON::XS::true みたいにエイリアスはって中でも JSON::XS::true を持たせてみたりして、そうしたら Perl の MongoDB ライブラリにおける真偽値 は Ingy さんのほうの boolean なのでやっぱり横着しちゃだめだなあ、とかそういうのをみると2013年になにをしているんだろうという感は強い。
とはいえ…
Perl, あるいは困ることについて - Kato Kazuyoshiでも Web まわりは PSGI にまとまって良かったじゃないですか。真偽値もまとまると便利なんですよみなさん
それほどばらけているかというとさにあらず。
#!/usr/bin/env perl use v5.12; use boolean -truth; use JSON; use Data::Dumper; say Dumper(0 == 1); say Dumper(JSON::false);
falseには\0を、trueには\1をそれぞれのpackageにblessしてるだけ。違いはどこにblessしているという点のみ。
しかしJSON::XSはそこを気にする。allow_blessedを設定していても、TO_JSON()を定義していないとnullになってしまう。
よって目下の best practice はこんなところではなかろうか。
https://gist.github.com/dankogai/5284015
#!/usr/bin/env perl
use v5.12;
use boolean -truth;
use JSON;
sub boolean::TO_JSON() { !$_[0] ? \0 : \1 }
my $json = JSON->new->convert_blessed;
my $bools = { false => ( 0 == 1 ), true => ( 1 == 1 ) };
eval { say encode_json($bools) };
warn $@ if $@;
say $json->encode($bools);
true/falseはboolean.pmのみを利用。boolean::to_JSON()をモンキーパッチ
1.はboolean.pmが対応してくれれば不要になるので、Pull Requestしておきました。
Dan the True Perl Monger
P.S. ingyより入電。merge && $boolean::VERSION++ 完了とのこと。

このブログにコメントするにはログインが必要です。
さんログアウト
この記事には許可ユーザしかコメントができません。