in reply to Net::SNMP ifHcInoctets percentage

The percentage might be too high because $tick is too small. If the SNMP query costs some seconds, the nodes can count bytes further during the time required to contact the SNMP instance. Furthermore, $tick is more or less 30s plus the time to query the device during the last iteration (plus hopefully negligible computation time) - which can have the effect of giving a percentage that is too low (if the current query was fast).
You can try a more conservative my $tick = time - $old_time; - or better - move the my $time = time;-line after the network operation.
Update: Maybe use Time::Hires to increase precision? It would also be interesting to get the devices' local time at the moment of the query (a single query) in order to eliminate other timing/measurement-dependencies. Comment about percentage too low added.