Entry tags:
Работа с датой в perl
Встретил в одном проекте код:
my $curdate = `date +%F`; chomp($curdate); $variables::system{date} = $curdate; # текущая дата
my $curtime = `date +%T`; chomp($curtime); $variables::system{time} = $curtime; # текущее время
Подумал и написал сравнение:
# perl -MPOSIX=strftime -MBenchmark=cmpthese -e 'cmpthese($ARGV[0], {
''A'' => sub { my $a = `date +%F`; chomp $a; my $b = `date +%T`; chomp $b; },
''B'' => sub { my $a = strftime "%F", localtime; my $b = strftime "%T", localtime },
''C'' => sub { my @a = localtime; my $a = strftime "%F", @a; my $b = strftime "%T", @a; },
''D'' => sub { my ( $a, $b ) = split "::", strftime "%F::%T", localtime } } )' 100000
Rate A B C D
A 4021/s -- -94% -95% -97%
B 71429/s 1676% -- -11% -55%
C 80000/s 1890% 12% -- -50%
D 158730/s 3848% 122% 98% --
#
Выводы:
1. `date +%F` -- избегать, тем более POSIX -- системный модуль.
2. POSIX::strftime -- тяжелый вызов, localtime (+ time) гораздо легче.