sub ordinate ($) {
my $num = shift;
$num =~ s/(\d*(11|12|13|4|5|6|7|8|9|0))$/$1th/
or $num =~ s/(\d*(1))$/$1st/
or $num =~ s/(\d*(2))$/$1nd/
or $num =~ s/(\d*(3))$/$1rd/;
return $num;
}
####
Rate Ordinate Method 3 Method 4 Method 2 Method 1
Ordinate 125/s -- -48% -50% -54% -64%
Method 3 242/s 93% -- -4% -11% -30%
Method 4 252/s 102% 5% -- -7% -27%
Method 2 272/s 117% 13% 8% -- -21%
Method 1 344/s 175% 42% 36% 27% --
####
#!/usr/bin/perl -w
use strict;
use Benchmark qw(:all :hireswallclock);
cmpthese( 2000, {
'Method 1' => 'for (0..300) { my $ord = method_1($_) }',
'Method 2' => 'for (0..300) { my $ord = method_2($_) }',
'Method 3' => 'for (0..300) { my $ord = method_3($_) }',
'Method 4' => 'for (0..300) { my $ord = method_4($_) }',
'Ordinate' => 'for (0..300) { my $ord = ordinate($_) }',
});
sub ordinate {
my $num = shift;
$num =~ s/(\d*(11|12|13|4|5|6|7|8|9|0))$/$1th/
or $num =~ s/(\d*(1))$/$1st/
or $num =~ s/(\d*(2))$/$1nd/
or $num =~ s/(\d*(3))$/$1rd/;
return $num;
}
sub method_1 {
my $suffix;
my $nouser = shift;
if ($nouser =~ /(?