PSON(PerlScript Object Notation)

JSONに対抗して。(ネタ)

package PSON;

use strict;
use warnings;

our $VERSION = '0.02';

use vars qw( @EXPORT_OK );
use Carp;
use Data::Dumper;
use Exporter 'import';
@EXPORT_OK = qw(obj2pson pson2obj);

use Readonly;
Readonly my $VARNAME => 'PSON_VALUE';

sub new { bless {}, shift };

sub obj2pson {
    my $obj = shift;

    local $Data::Dumper::Indent  = 0;
    local $Data::Dumper::Varname = $VARNAME;
    return Dumper( $obj );
}

sub pson2obj {
    my $str = shift;

    no strict;

    &_is_dumpeddata( $str ) ? eval ( $str ) : croak "No PSON Data!";
}

sub _is_dumpeddata {
    my $str = shift;

    return ( $str =~/^\$$VARNAME/) ? 1 : 0;
}

1;

=head1 NAME

PSON - PSON(PerlScript Object Notation)  Module

=head1 SYNOPSYS

 use PSON qw(obj2pson pson2obj);

 my $data = { x=> 'adfs' , y => 'adf' };

 my $pson = obj2pson( $data );

 my $obj  = pson2obj( $pson );

 #data == $pson 

=head1 METHOD

=head2 obj2pson( $object )

PerlのオブジェクトをPerlの構文で返します。(Dumperの結果です)

=head2 pson2obj( $perl_string )

Perlの構文をPerlのオブジェクトに変換します。(Dumperの逆)

=head1 注意

evalしてるだけなんで、危ないよ。

=head1 AUTHOR

Masahiro Funakoshi <mfunakoshi@gmail.com>
Tomohiro Teranishi <tomohiro.teranishi@gmail.com>

=cut