++ed by:

4 PAUSE users
2 non-PAUSE users.

Author image Brock Wilcox


Continuity::RequestCallbacks - Mix callbacks into the Continuity request object


  use Continuity;
  use Continuity::RequestCallbacks;


  sub main {
    my $request = shift;
    my $link_yes = $request->callback_link( Yes => sub {
      $request->print("You said yes! (please reload)");
    my $link_no = $request->callback_link( No => sub {
      $request->print("You said no! (please reload)");
      Do you like fishies?<br>
      $link_yes $link_no
    $request->print("All done here!");


This adds some methods to the $request object so you can easily do some callbacks.


$html = $request->callback_link( "text" => sub { ... } );

Returns the HTML for an href callback.

$html = $request->callback_submit( "text" => sub { ... } );

Returns the HTML for a submit button callback.


Execute callbacks, based on the params in $request. Call this after you've displayed the form and then done $request->next.

We don't call this from within $request->next in case you need to do some processing before executing callbacks. Checking authentication is a good example of something you might be doing inbetween :)

By default the callbacks are cleared with ->clear_callbacks after all callbacks are processed. If you'd like, you can pass a hashref with a flag to indicate that the remaining callbacks shouldn't be cleared, like this:

  $request->execute_callbacks( { no_clear_all => 1 } );

You might want to do this if, for example, you are doing some AJAX and don't want one js component clearing the callbacks of another. It is most likely a bad idea though due to the ensuing memory leak. If it makes you feel any better, you can pass "clear_executed" in the same way to clear at least some, preventing double-execution. You'd probably use both flags:

  $request->execute_callbacks( { no_clear_all => 1, clear_executed => 1 } );


Explicitly clear the current list of callbacks. This is already called at the end of execute_callbacks. It additionally exists here in case you want to clear the callbacks without processing.