in reply to Reasonably accurate timing

How about sleeping until the next polling interval (based on when you started looping) instead of a hardcoded delay? This will account for however long your processing takes (even if the amount of time it takes to process changes). It can be "off" by a fraction of a second, but should correct itself so the drift does not accumulate.
my $t0=time(); while(1){ # do processing # .. # sleep till next polling interval. sleep 60-(time()-$t0)%60; }
Use this concept with Time::HiRes for greater accuracy.