use strict; use warnings; use Benchmark qw( :all ); use Storable qw(freeze thaw); my (%data, %hash_b, %hash_d); # data %data = ( 1 => ['123','456','678'], 2 => 'value_2', 3 => 'value_3', 4 => 'value_4', 5 => 'value_5', 6 => 'value_6', 7 => 'value_7', 8 => 'value_8' ); # prepare simulating retrieved data my $item_1 = join(' ',@{$data{'1'}}); my $pipe_serialized = $item_1.'|'.$data{'2'}.'|'.$data{'3'}.'|'.$data{'4'} .'|'.$data{'5'}.'|'.$data{'6'}.'|'.$data{'7'}.'|'.$data{'8'}; my $storable_serialized = freeze(\%data); cmpthese( -1, { # serialized using pipes as a delimiter a => sub { my @ary = split(/\|/,$pipe_serialized); my %hash = (); @hash{'1','2','3','4','5','6','7','8'} = @ary; $hash{'1'} = [ split(/ /,$hash{'1'}) ]; }, b => sub { %hash_b = (); @hash_b{'1','2','3','4','5','6','7','8'} = split(/\|/,$pipe_serialized); $hash_b{'1'} = [ split(/ /,$hash_b{'1'}) ]; }, # serialized using storable c => sub { my $hash_ref = thaw($storable_serialized ); my %hash = %$hash_ref; }, d => sub { %hash_d = %{ thaw($storable_serialized ) }; }, } ); # check results use Data::Dumper; print "hash_b:\n",Dumper(\%hash_b),"\n\n\n"; print "hash_d:\n",Dumper(\%hash_d),"\n\n\n";