CGIMini::JavaScript::Variable
Perlの構造体をJavaScriptな形式に変換。
使い方は至って簡単
my $jsvar = CGIMini::JavaScript::Variable->new( foo => [ 'one', 'two', 'three' ]);
print $jsvar->output;
結果は
var foo = ['one','two','three'];
とな。
package CGIMini::JavaScript::Variable; use strict; sub new{ my $class = shift; my $name = shift; my $var = shift; return bless({ name => $name, var => $var }, $class); } sub output{ my $self = shift; return 'var ' . $self->{name} . ' = ' . _dump($self->{var}) . ';'; } sub _dump{ my $struct = shift; my $r = UNIVERSAL::isa($struct, 'UNIVERSAL') ? _ref_obj($struct) : ref($struct); return ( $r eq 'ARRAY' ) ? '[' . join(',', map{ _dump($_) }@$struct) . ']' : ( $r eq 'HASH' ) ? '{' . join(',', map{ _dump($_) . ':' . _dump($struct->{$_}) }keys %$struct) . '}' : "'" . _esc($struct) . "'"; } sub _ref_obj{ my $obj = shift; return $obj->isa('ARRAY') ? 'ARRAY' : $obj->isa('HASH') ? 'HASH' : ''; } sub _esc{ my $str = shift; $str =~ s/\\/\\\\/g; $str =~ s/'/\\'/g; $str =~ s/([\r\n])/\\$1/g; return $str; } 1;