use Time::HiRes qw(sleep gettimeofday);

local $| = 1;    

my $beats_per_minute = shift || 72;
my $beats_per_bar    = shift || 4;

my $i         = 0;
my $duration  = 60 / $beats_per_minute;
my $base_time = gettimeofday() + $duration;

for (my $next_time = $base_time ; ; $next_time += $duration) {
    if ($i++ % $beats_per_bar == 0) {
        print "\nTICK";
    }
    else {
        print " tick";
    }
    sleep($next_time - gettimeofday());
}