ocehb: (Default)
ocehb ([personal profile] ocehb) wrote2013-08-30 04:36 pm
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) гораздо легче.



Post a comment in response:

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org