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]; }