#!/usr/bin/perl use strict; use warnings; use POSIX; use Benchmark qw( cmpthese ); use constant DAY => 60 * 60 * 24; sub use_array { my @parts = localtime(); $parts[3] -= 14; return POSIX::strftime('%Y%m%d', @parts); } sub use_math { return POSIX::strftime( '%Y%m%d', localtime(time - (14 * (60 * 60 * 24))) ); } sub use_math_with_const { return POSIX::strftime('%Y%m%d', localtime(time - (14 * DAY ))); } cmpthese( 90000, { 'use_array' => sub { use_array(); }, 'use_math' => sub { use_math(); }, 'use_math_with_const' => sub { use_math_with_const(); }, }, ); __DATA__ Benchmark: timing 90000 iterations of use_array, use_math, use_math_with_const... use_array: 6 wallclock secs ( 5.67 usr + 0.10 sys = 5.77 CPU) @ 15597.92/s (n=90000) use_math: 4 wallclock secs ( 3.63 usr + 0.11 sys = 3.74 CPU) @ 24064.17/s (n=90000) use_math_with_const: 3 wallclock secs ( 3.70 usr + 0.05 sys = 3.75 CPU) @ 24000.00/s (n=90000) Rate use_array use_math_with_const use_math use_array 15598/s -- -35% -35% use_math_with_const 24000/s 54% -- -0% use_math 24064/s 54% 0% --