Mail WebOn AS wrote:
>
> Was looking through the PGAS code and ran into these lines :
>
> # Is there a better way to do this? Probably
> my $day = int($time_left/(60*60*24));
> my $hour = int(($time_left%(60*60*24))/(60*60));
> my $min = int((($time_left%(60*60*24))%(60*60))/60);
> my $sec = int((($time_left%(60*60*24))%(60*60))%60);
> my $day_hour_min_sec = "$day days, $hour hours, $min minutes, $sec seconds";
>
> Here is a shorter way :
>
> my @t = map { $time_left = ($time_left - ($time = $time_left % $_)) / $_; $time
>}(60,60,24);
> my $day_hour_min_sec = "$time_left days, $t[2] hours, $t[1] minutes, $t[0] seconds";
>
> but how about the plural s in day / days etc.
> here is what i hacked together.
>
> my $t = $time_left;
> my @t=qw{day hour minute second};
> my $day_hour_min_sec = join', ',map{"$_ $t[$i++]".($_!=1?"s":"")}reverse
>map{$t=($t-($,=$t%$_))/$_;$,}(60,60,24,9);
>
> but in true golf style. anyone for a clever / shorter way of doing that ?
> this one only works for < 9 days, but a Perl golf contest usually last < 9 days.
>
> Terje K
I generally strip the plural 's' off all units at once with:
s/\b(1 \w+)s/$1/g
(BTW: golf your ($_!=1?"s":"") to ($_!=1&&"s") :)
--
Rick Klement