#!/usr/bin/perl use Time::HiRes qw(time sleep); my $load = shift @ARGV; my $sleep = 0.01; $| = 1; my @t = times; my @last = [time, $t[0] + $t[1]]; while (1) { @t = times; unshift @last, [time, $t[0] + $t[1]]; pop @last if @last > 100; my $current = 100 * ($last[0][1]-$last[-1][1])/ (0.00001 + $last[0][0]-$last[-1][0]); if ($current > $load) { sleep $sleep; } else { while (time < $last[0][0] + $sleep) { for (1..10000) { 1; } } } }