PerlのData::Dumperを用いる場合、JavaScript(以下JS)との相性はそれほど良くない。
理由としては、まずデータをPerlからJSに格納する場合、
JSが[]の記号でデータを格納するのに対して、
Perlの配列は()の記号で格納しないと認識しないからだ。
従ってData::Dumperを用いる際もこの辺をちょこちょこいじらなければならない。
※無名配列も一般的らしいが私は配列にこだわるため気になる人は以下を参照のこと
リファレンスと多次元データ構造
サンプルコードを示そう。
#以下を2次元配列の文字列として変数に格納
my $Val = "[['y0x0','y0x1'y0x2'],['y1x0','y1x1','y1x2']]";
#上記のデータをPerlで配列化するためには以下の方法を用いる
#正規表現によって [[ と ]] を ([ と ]) に変換
$Val =~ s/\[\[/\(\[/g;
$Val =~ s/\]\]/\]\)/g;
#配列格納処理
my @Array = eval $Val;
#eval実行エラー処理
if ($@){
print 'エラーが発生しました';
}
#データ変更の場合は以下のような処理
my $y = 0;
my $x = 1;
$Array[$y][$x] = "change_y0x1";
#データをJS形式にダンプする際にはまずData::Dumperの設定を行う
#ダンプ設定
local $Data::Dumper::Indent = 0;#データをみっちり詰める
local $Data::Dumper::Terse = 1;#余計なデータを出力しないように
local $Data::Dumper::Useqq = 1;#高速化のため指定※デフォルトだが念のため
local $Data::Dumper::Useperl = 1;#日本語文字列を文字化けさない
#PerlのデータをJS形式する際には以下のようにする
my $JSData = Dumper(\@Array);
以上のような例がPerlとJSのData::Dumper式データのやり取りである。
また、Perl側はevalを使ってデータを読み込ませているので、
あくまでもユーザーの入力に依存しない処理のみ利用できる。
※ユーザーに任意のコードを実行させないため。
かなり鈍くさいプログラムかもしれないが、これは私の限界である。
今回は以上となるが何らかの参考になれば幸いである。