in reply to Converting Seconds to Nice Format

The following subroutine, with a one-line join, should do the trick:
sub PrettyTime { my $s = int(shift); join(', ', reverse map {my $t = $s % $_->[0]; $s /= $_->[0]; $t.$_-> +[1].($t > 1 ? 's' : '')} ([60, ' sec'], [60, ' min'], [24, ' hr'], [9 +999999, ' day'])) }
Limitations are integer seconds and up to 9999999 days. Both would be easy to remedy. But it does handle singular and plural units. For example, print PrettyTime(1234561) prints 14 days, 6 hrs, 56 mins, 1 sec Eliminating zeroes is harder, though, because join sticks its delimiter in even when map returns undef. Leading zeroes are no easier either, because map doesn't respond to a last. For these you might have to resort to a foreach with an internal unshift (eliminates the reverse) into a results array. Then do the join.