split: 17 wallclock secs (16.69 usr + 0.02 sys = 16.71 CPU) @ 59844.40/s (n=1000000)
substr: 0 wallclock secs ( 0.74 usr + 0.00 sys = 0.74 CPU) @ 1351351.35/s (n=1000000)
unpack: 1 wallclock secs ( 1.02 usr + 0.00 sys = 1.02 CPU) @ 980392.16/s (n=1000000)
####
split: 2 wallclock secs ( 1.16 usr + 0.00 sys = 1.16 CPU) @ 862068.97/s (n=1000000)
substr: 1 wallclock secs ( 0.70 usr + 0.00 sys = 0.70 CPU) @ 1428571.43/s (n=1000000)
unpack: 0 wallclock secs ( 0.96 usr + 0.00 sys = 0.96 CPU) @ 1041666.67/s (n=1000000)
####
#!/usr/bin/perl -w
use strict;
use Benchmark;
use vars qw/$str/;
$str = "123456789asgdjlaskjglkajblnlbnlaqjteoijqotijwojgl;akjglkj";
timethese(shift || 1000000, {
'unpack' => sub { my $char = getn_unpack($str, 1) },
'substr' => sub { my $char = getn_substr($str, 1) },
'split' => sub { my $char = getn_split($str, 1) }
});
sub getn_unpack {
return unpack "x" . ($_[1]-1) . "a", $_[0];
}
sub getn_substr {
return substr $_[0], $_[1]-1, 1;
}
sub getn_split {
return +(split //, $_[0],2)[$_[1]-1];
}