SYNOPSIS

     use Sub::NoRepeat qw(norepeat);
    
     # run coderef
     norepeat(code => \&sub1);
    
     # won't run the same coderef again, noop
     norepeat(code => \&sub1);
    
     # run coderef because this one is different
     norepeat(code => sub { ... });
    
     # won't repeat because we use sub1 as key
     norepeat(code => sub { ... }, key => \&sub1);
    
     # run external command instead of coderef, die on non-zero exit code
     norepeat(command => ['somecmd', '--cmdopt', ...]);
    
     # will repeat after 24 hours
     norepeat(period => '24h', ...);
    
     # will repeat after change of day (equals to once daily):
     norepeat(period => 'daily', ...);
    
     # allows twice daily
     norepeat(period => 'daily', num=>2, ...);

DESCRIPTION

DATA FILE

    Data file is a line-oriented text file, using labeled tab-separated
    value format (http://ltsv.org/). Each row contains these labels: time
    (a timestamp either in the format of UTC ISO8601YYYY-MM-DDTHH:MM:SSZ,
    local ISO8601 YYYY-MM-DDTHH:MM:SS, or Unix timestamp), key (tabs and
    newlines will be converted to spaces).

    The rows are assumed to be sorted chronologically (increasing time).

SEE ALSO

    App::norepeat, the CLI version.

    Unix cron facility for periodic/scheduling of execution.

    Related: modules to limit the number of program instances that can run
    at a single time: Proc::Govern, Sys::RunAlone.

