#!/usr/bin/perl use strict; use warnings; use Benchmark qw/cmpthese/; ################## # SERIALIZING # ################## cmpthese( 1_000_000, { construct_hash => sub { my @a = (1..6); return +{ k1 => $a[0], k2 => $a[1], k3 => $a[2], k4 => $a[3], k5 => $a[4], k6 => $a[5] } }, construct_packed => sub { my @a = (1..6); return pack('sI2Lddd', 6, @a );# ignore the front 's' , I'm using that for something else }, # old cache construct_comma_separated => sub { my @a = (1..6); return "$a[0],$a[1],$a[2],$a[3],$a[4],$a[5]"; }, construct_array => sub { my @a = (1..6); return \@a; }, }); ################## # DESERIALIZING # ################## my @access_vals = 1..6; my $access_vals_ref = \@access_vals; my $access_h = +{ k1 => $access_vals[0], k2 => $access_vals[1], k3 => $access_vals[2], k4 => $access_vals[3], k5 => $access_vals[4], k6 => $access_vals[5] }; my $access_packed = pack("sI2Lddd",@access_vals); # ignore the front 's' , I'm using that for something else my $access_comma_separated = "3411,2,3,45,5.33,6.12"; cmpthese( 1_000_000 , { access_hash => sub { my $k1 = $access_h->{k1}; my $k2 = $access_h->{k2}; my $k3 = $access_h->{k3}; my $k4 = $access_h->{k4}; my $k5 = $access_h->{k5}; my $k6 = $access_h->{k6}; }, access_packed => sub { my ($values_packed,$k1,$k2,$k3,$k4,$k5,$k6)=unpack('sI2Lddd',$access_packed);# ignore the front 's' , I'm using that for something else }, access_comma_separated => sub { my ($k1,$k2,$k3,$k4,$k5,$k6) = split(/,/,$access_comma_separated); }, access_array => sub { my ($k1,$k2,$k3,$k4,$k5,$k6) = @$access_vals_ref; }, });