#!/usr/bin/perl -w use strict; use Benchmark; my $string = "a man, a plan, a canal, panama!"; sub using_regexp { $string =~ /^(.)/o; return $1; } sub using_split { return (split('', $string, 2))[0]; } sub using_substring { return substr($string, 0, 1); } sub using_unpack { return unpack('A1', $string); } sub using_reverse_chop { return chop reverse $string; } timethese(-5, {'Using Regexp' => \&using_regexp, 'Using Split' => \&using_split, 'Using Substring' => \&using_substring, 'Using Unpack' => \&using_unpack, 'Using Reverse & Chop' => \&using_reverse_chop, }); #### [earino@localhost earino]$ ./first_char.pl Can't modify reverse in chop at ./first_char.pl line 27, near "$string;" Execution of ./first_char.pl aborted due to compilation errors. [earino@localhost earino]$ #### return chop reverse scalar $str; #### #!/usr/bin/perl -w use strict; use Benchmark; my $string = "a man, a plan, a canal, panama!"; sub using_regexp { $string =~ /^(.)/o; return $1; } sub using_split { return (split('', $string, 2))[0]; } sub using_substring { return substr($string, 0, 1); } sub using_unpack { return unpack('A1', $string); } sub using_reverse_chop { my $str = reverse $string; return chop $str; } timethese(-5, {'Using Regexp' => \&using_regexp, 'Using Split' => \&using_split, 'Using Substring' => \&using_substring, 'Using Unpack' => \&using_unpack, 'Using Reverse & Chop' => \&using_reverse_chop, }); #### Benchmark: running Using Regexp, Using Reverse & Chop, Using Split, Using Substring, Using Unpack, each for at least 5 CPU seconds... Using Regexp: 5 wallclock secs ( 5.39 usr + -0.01 sys = 5.38 CPU) @ 207251.30/s (n=1115012) Using Reverse & Chop: 4 wallclock secs ( 5.23 usr + 0.00 sys = 5.23 CPU) @ 255457.74/s (n=1336044) Using Split: 5 wallclock secs ( 5.25 usr + 0.01 sys = 5.26 CPU) @ 97116.92/s (n=510835) Using Substring: 5 wallclock secs ( 5.25 usr + -0.02 sys = 5.23 CPU) @ 1009882.22/s (n=5281684) Using Unpack: 5 wallclock secs ( 5.27 usr + 0.01 sys = 5.28 CPU) @ 260676.33/s (n=1376371)