$ perl -MPOSIX=strftime -le'print strftime "%a %b %e %Y", localtime'
Thu Dec 17 2009
####
$ perl -le'substr(my $now = localtime, 11, 9, ""); print $now'
Thu Dec 17 2009
####
Rate splice strftime slice subst substr
splice 93974/s -- -23% -40% -49% -64%
strftime 121619/s 29% -- -23% -33% -53%
slice 157894/s 68% 30% -- -14% -40%
subst 182658/s 94% 50% 16% -- -30%
substr 261283/s 178% 115% 65% 43% --
####
use strict;
use warnings;
use Benchmark qw( cmpthese );
use POSIX qw( strftime );
sub using_splice {
my @t = split /\s/, $_[0];
splice @t, 3, 1;
return join ' ', @t;
}
sub using_slice {
return join " ", ( split " ", $_[0] )[0,1,2,4];
}
my %tests = (
splice => 'my $now = using_splice(scalar(localtime));',
slice => 'my $now = using_slice(scalar(localtime));',
subst => '( my $now = localtime ) =~ s/(?:\d\d:){2}\d\d //;',
strftime => 'my $now = strftime("%a %b %d %Y", localtime);',
substr => 'substr(my $now = localtime, 11, 9, "");',
);
$_ = "use strict; use warnings; $_"
for values %tests;
cmpthese(-3, \%tests);