とりあえず含蓄は後回しにして、以下同感。
ああこの変数は真偽値として扱ってるけど 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++
完了とのこと。
このブログにコメントするにはログインが必要です。
さんログアウト
この記事には許可ユーザしかコメントができません。