use strict; use warnings; use JSON; my $usedeltatime=0; eval 'use time::DeltaTime;' if ($usedeltatime); my @bigarray; my %bighash; doit(0,0); doit(1,0); doit(1,1); sub doit { my $usecache1=shift; my $usecache2=shift; deltatime('all','set') if ($usedeltatime); if ($usecache2) {$usecache1=1;} if ($usecache1){ open (my $cache1,'<','json1.json') or die $@; my $save= do {local $/;<$cache1>}; close $cache1; @bigarray= @{decode_json($save)}; deltatime('all','stage','cache1r:'.$usecache1) if ($usedeltatime); } else { for my $ii (1..30000) { if (rand(100)>80) { push @bigarray,$ii; } } my $save = encode_json (\@bigarray); open (my $cache1,'>','json1.json') or die $@; print $cache1 $save; close $cache1; deltatime('all','stage','cache1w:'.$usecache1) if ($usedeltatime); } if ($usecache2){ open (my $cache2,'<','json2.json') or die $@; my $save= do {local $/;<$cache2>}; close $cache2; %bighash= %{decode_json($save)}; deltatime('all','stage','cache2r:'.$usecache2) if ($usedeltatime); } else { foreach my $i (@bigarray){ foreach my $j (@bigarray) { my $positive = $i + $j; next if $positive > 28123; $bighash{$positive} ++; } } my $save = encode_json (\%bighash); open (my $cache2,'>','json2.json') or die $@; print $cache2 $save; close $cache2; deltatime('all','stage','cache2w:'.$usecache2) if ($usedeltatime); } print 'array:'.scalar(@bigarray)."\n";; print 'hash :'.scalar(keys %bighash)."\n";; deltatime('all','done','cache1:'.$usecache1.'cache2:'.$usecache2) if ($usedeltatime); } # dout