use Sub::Deferred store => '/tmp/foo_timelock'; defer( 'page_me', 600 ); # ... if( something_really_bad() ) { my $message = "Something Really Bad just happened..."; page_me( $message ); # run only once every 600 seconds }