<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">SYNOPSIS

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

</pre></body></html>