use Benchmark 'cmpthese'; my $oy = 'a'x999; cmpthese( -3, { split => sub { my $str = $oy; my @b = split//,$str; }, subst => sub { my $str = $oy; my @b; while(length $str){ push @b, substr($str,0,1,undef); } }, match => sub { my $str = $oy; my @b = $str =~ /(.)/g; } }); __END__ Benchmark: running match, split, subst, each for at least 3 CPU seconds... match: 3 wallclock secs ( 3.28 usr + 0.00 sys = 3.28 CPU) @ 1587.14/s (n=5209) split: 3 wallclock secs ( 3.31 usr + 0.00 sys = 3.31 CPU) @ 1563.71/s (n=5179) subst: 4 wallclock secs ( 3.28 usr + 0.00 sys = 3.28 CPU) @ 1131.67/s (n=3713) Rate subst split match subst 1132/s -- -28% -29% split 1564/s 38% -- -1% match 1587/s 40% 1% --