Caching Date Conversions
This
is
probably the most straightforward
way to implement the
&get_seconds
subroutine, and it works
perfectly well. It’s not very efficient, though. Beginning
programmers normally are too busy worrying about making their
programs run at all to worry about making them run faster. But this
is a special case. Unlike a lot of our scripts, which take no
appreciable time to run, this one could end up crunching some pretty
big log files and taking a significant amount of time to do so. It
also might end up being run day after day. A little extra effort
spent on making it more efficient will pay dividends in the long run.
The Time::Local
module’s
timelocal
function involves a fair amount of
behind-the-scenes computation, and the approach used here invokes
that function once for each log file line that makes it as far as the
&get_seconds
subroutine. When you think about
it, though, the only tricky part of the timelocal
function is the part where it figures the appropriate number of
seconds for the current date. The part where it adds the appropriate
number of seconds for the current time of day is relatively simple;
it just involves adding the seconds, plus the minutes times 60, plus
the hours times 3600.
But for every access on a given day, the date part of the log file
entry is going to be exactly the same. Which leads to this idea: why
not use timelocal
only for the date part, and run it only once for each day represented in the log file? You can then save ...
Get Perl for Web Site Management now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.