#!/usr/local/bin/perl -w use strict; use Benchmark; use vars qw/$str/; $str = "123456789asgdjlaskjglkajblnlbnlaqjteoijqotijwojgl;akjglkj"; timethese(shift || 10000, { 'unpack' => sub { my $char = getn_unpack($str, 30) }, 'substr' => sub { my $char = getn_substr($str, 30) }, 'split' => sub { my $char = getn_split($str, 30) } }); 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])[$_[1]-1]; } #### Benchmark: timing 100000 iterations of split, substr, unpack... split: 20 secs (19.39 usr 0.00 sys = 19.39 cpu) substr: 0 secs ( 1.78 usr 0.00 sys = 1.78 cpu) unpack: 2 secs ( 2.89 usr 0.00 sys = 2.89 cpu)