This just looks like a quick-n-dirty version of Time::localtime, except that it makes mon and year a useful value, and modifies wday (which is of value only if you think that wday numbers have a meaning outside of an array index).
The only other change I'd suggest is to check your context:
return wantarray ? %time : \%time;
I find being able to get the data in the format I want a very useful feature of perl. Especially since the speed difference is usually
(but probably not always) in the ref's favour, while the readability of your example usage is definitely a point in favour of having the list return.