use strict; use warnings; use Benchmark; use Data::Dumper; use YAML; use JSON; use XML::Dumper; use Storable qw(nfreeze thaw); use Safe; my $struct = {   s1 => [qw(v1 v2 v3 v4 v5 v6 v7 v8 v9 v0)],   s2 => {      s3 => [qw(v11 v12 v13 v14 v15 v16 v17 v18 v19 v20)],      s4 => 'v21',   },   s5 => [ { s6 => 'v22', s7 => 'v23' }, { s8 => 'v24', s9 => 'v25' } ],   s0 => 'v26', }; sub xml_dumper {   my $dmp = new XML::Dumper;   my $p2s = $dmp->pl2xml($struct);   my $s2p = $dmp->xml2pl($p2s); } sub json {   my $json = new JSON;   my $p2s  = $json->objToJson($struct);   my $s2p  = $json->jsonToObj($p2s); } sub storable {   my $safe = new Safe;   $safe->permit(qw(:default require));   {      no warnings 'once';      $Storable::Deparse = 1;      $Storable::Eval = sub { $safe->reval($_[0]) };   }   my $p2s = nfreeze $struct;   my $s2p = thaw $p2s; } sub data_dumper {   my $p2s = Dumper($struct);   my $safe = new Safe;   my $s2p = $safe->reval($p2s); } sub yaml {   my $p2s = Dump($struct);   my $s2p = Load($p2s); } Benchmark::cmpthese(-1,{   'xml-dumper'  => \&xml_dumper,   'storable'    => \&storable,   'data-dumper' => \&data_dumper,   'yaml'        => \&yaml,   'json'        => \&json, });