Data::JavaScript, Data::JavaScript::LiteObject, Data::JavaScript::Anon
pirlと共に使ってみました。淡々と紹介します。w
Data::JavaScript
pirl @> use Data::JavaScript; jsdump('hoge', 1);
"var hoge = 1;"
pirl @> use Data::JavaScript; jsdump('hoge', "hogehoge");
"var hoge = \"hogehoge\";"
pirl @> use Data::JavaScript; jsdump('hoge', [ 0 .. 10 ]);
(
"var hoge = new Array;",
"hoge[0] = 0;",
"hoge[1] = 1;",
"hoge[2] = 2;",
"hoge[3] = 3;",
"hoge[4] = 4;",
"hoge[5] = 5;",
"hoge[6] = 6;",
"hoge[7] = 7;",
"hoge[8] = 8;",
"hoge[9] = 9;",
"hoge[10] = 10;",
)
pirl @> use Data::JavaScript; jsdump('hoge', { foo => 1, bar => 2 } );
(
"var hoge = new Object;",
"hoge[\"bar\"] = 2;",
"hoge[\"foo\"] = 1;",
)もう少し複雑に、
pirl @> use Data::JavaScript; jsdump('hoge', { foo => { hoge => 1 } , bar => [ 0 .. 10 ] } );
(
"var hoge = new Object;",
"hoge[\"bar\"] = new Array;",
"hoge[\"bar\"][0] = 0;",
"hoge[\"bar\"][1] = 1;",
"hoge[\"bar\"][2] = 2;",
"hoge[\"bar\"][3] = 3;",
"hoge[\"bar\"][4] = 4;",
"hoge[\"bar\"][5] = 5;",
"hoge[\"bar\"][6] = 6;",
"hoge[\"bar\"][7] = 7;",
"hoge[\"bar\"][8] = 8;",
"hoge[\"bar\"][9] = 9;",
"hoge[\"bar\"][10] = 10;",
"hoge[\"foo\"] = new Object;",
"hoge[\"foo\"][\"hoge\"] = 1;",
)少し意地悪に、
pirl @> use Data::JavaScript; jsdump('hoge', { foo => sub { print "hoge" } } );
("var hoge = new Object;", "")(><)
Data::JavaScript::LiteObject
バグってる。
pirl @> use Data::JavaScript::LiteObject; jsodump(protoName => "foo", dataRef => []);
("function foo (", "", ") {\n\t", "}\n", " = new foo(", " ", ");\n")はぁ?
pirl @> use Data::JavaScript::LiteObject; my %data = (foo => 1, bar => 2); jsodump(protoName => "foo", dataRef => \%data);
ERROR: Can't use string ("2") as a HASH ref while "strict refs" in use at /Library/Perl/5.8.6/Data/JavaScript/LiteObject.pm line 34.終了。
Data::JavaScript::Anon
pirl @> use Data::JavaScript::Anon; Data::JavaScript::Anon->anon_dump({ foo => 1, bar => { a => 5, b => [0 .. 10] } });
"{ bar: { a: 5, b: [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] }, foo: 1 }"おお、優秀!
まとめ
Data::JavaScript::Anonを使いましょう。