# range A : 1-3
# range B : 5-6
my $range_string = '-AAA-BB---';
####
use warnings;
use strict;
use Devel::Size qw/total_size/;
use Benchmark;
++$|;
print ">>Strings:\n";
my $t0 = Benchmark->new;
for (10e3, 10e4, 10e5,){
my %r;
my($i,$l,$g) = (0) x 3;
for( 1 .. $_ ) {
$r{ int( $i / 10e3 ) } .=
qq[ $i -@{[ $i + ( $l = 1500 + int( -500 + rand 1000 ) ) ]} ];
$i+=$l + 25 + int( rand 25 );
}
print "$_ : " . (total_size(\%r) ) . "\n";
}
my $t1 = Benchmark->new;
my $td = timediff($t1, $t0);
print "String took:",timestr($td),"\n";
print ">>AoA:\n";
$t0 = Benchmark->new;
for (10e3, 10e4, 10e5,){
my %r;
my($i,$l,$g) = (0) x 3;
for( 1 .. $_ ) {
push @{ $r{ int( $i / 10e3 ) } },
[ $i, @{[ $i + ( $l = 1500 + int( -500 + rand 1000 ) ) ]} ];
$i+=$l + 25 + int( rand 25 );
}
print "$_ : " . (total_size(\%r) ) . "\n";
}
$t1 = Benchmark->new;
$td = timediff($t1, $t0);
print "Array took:",timestr($td),"\n";
print system('perl -v');
##
##
>>Strings:
10000 : 274788
100000 : 2949952
1000000 : 32010214
String took: 5 wallclock secs ( 5.55 usr + 0.06 sys = 5.61 CPU)
>>AoA:
10000 : 1597360
100000 : 15972002
1000000 : 160299622
Array took:23 wallclock secs (21.97 usr + 0.30 sys = 22.27 CPU)
This is perl, v5.8.8 built for MSWin32-x86-multi-thread
(with 18 registered patches, see perl -V for more detail)
Binary build 822 [280952] provided by ActiveState http://www.ActiveState.com
Built Jul 31 2007 19:34:48
Haha. I am fully aware how old this is, but you try convincing my work that..