#!/usr/bin/perl -w use strict; use Benchmark qw[ cmpthese timethese]; my $string='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'; my @chars=split //,$string; cmpthese ( 1000000, { 'Substr'=>sub { my $string='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'; for (my $i=0;$isub { foreach my $char (@chars) {} }, 'Split'=>sub { my @string=split //,'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'; foreach my $char (@string) {} }, 'Shift'=>sub { my @string='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'; shift @string;{} } } ); __END__ prints: Rate Split Substr pre_splitted Shift Split 8840/s -- -72% -94% -99% Substr 31465/s 256% -- -78% -95% pre_splitted 140667/s 1491% 347% -- -80% Shift 695410/s 7767% 2110% 394% --