use Time::HiRes qw(time);
This will give you a floating point time function instead of integer seconds.
In the current program you will have to type a really long line so that the division errors like 4.9 seconds which will sometimes be 4 seconds and sometimes be 5 seconds which will cause a 25% change in your typing WPM.
The floating poing time function will fix this up since the steps will be on the order of 0.01 seconds rather than 1 second which will improve the granularity of your estimate 100 times so that a one step change from 4.99 to 5.00 will result in a 0.25% change in the WPM figure.