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.