On Sun, 02 May 2004 19:29:01 +0200, Adam wrote:
> Det bliver lidt mere rodet på den måde, men hvis man sammenligner er
> det ca. dobbelt så hurtigt. (Hvilket sikkert ikke betyder i pind i
> sammenhængen
Ah, det er p.g.a. localtime(str2time(...)) i den første udgave:
$ ./test.pl
Rate posix_strf_local_str2 sprintf_local_str2 posix_strf_strp sprintf_strp
posix_strf_local_str2 7299/s -- -6% -42% -46%
sprintf_local_str2 7752/s 6% -- -39% -43%
posix_strf_strp 12658/s 73% 63% -- -6%
sprintf_strp 13514/s 85% 74% 7% --
$ cat test.pl
#!/usr/bin/perl
use strict;
use warnings;
use Date::Parse;
use POSIX qw(strftime);
use Benchmark qw(:all);
cmpthese(
10000,
{
'posix_strf_local_str2'=>\&posix_strf_local_str2,
'sprintf_strp'=>\&sprintf_strp,
'sprintf_local_str2'=>\&sprintf_local_str2,
'posix_strf_strp'=>\&posix_strf_strp,
}
);
sub posix_strf_local_str2 {
my $date="May 2 18:57:57";
my $text=strftime "%Y-%m-%d %H:%M:%S", localtime(str2time($date));
}
sub sprintf_strp {
my $date="May 2 18:57:57";
my ($sec, $min, $hour, $day, $mon, $year, $zone)=strptime($date);
$mon++;
$year=(localtime())[5]+1900 unless (defined $year);
my $text=sprintf "%4.4d-%2.2d-%2.2d %2.2d:%2.2d:%2.2d", $year, $mon, $day, $hour, $min, $sec;
}
sub sprintf_local_str2 {
my $date="May 2 18:57:57";
my ($sec, $min, $hour, $day, $mon, $year, $wday, $yday, $isdst)=localtime(str2time($date));
$mon++;
$year+=1900;
my $text=sprintf "%4.4d-%2.2d-%2.2d %2.2d:%2.2d:%2.2d", $year, $mon, $day, $hour, $min, $sec;
}
sub posix_strf_strp {
my $date="May 2 18:57:57";
my ($sec, $min, $hour, $day, $mon, $year, $zone)=strptime($date);
$year=(localtime())[5] unless (defined $year);
my $text=strftime "%Y-%m-%d %H:%M:%S", ($sec, $min, $hour, $day, $mon, $year);
}
$
Den langsommeste er den mest læselige
Mvh.
--
"Når bakken er frossen og dammen er kald Adam Sjøgren
då kan du kjenna varmen av metall" asjo@koldfront.dk