in reply to CGI::Application and subroutines

Your error handler simply returns "here1", in your save_subsrbr method, you call errorhandler in void context, which means you throw away the return value of the errorhandler. If you want the return value of errorhandler to be output, you need to specifically save it and print it.

Replies are listed 'Best First'.
Re^2: CGI::Application and subroutines
by bradcathey (Prior) on Dec 11, 2005 at 05:55 UTC

    Thanks BUU (and [Limbic~Region who msg me), but I not quite sure I'm getting it. Let me explain what's going on in my actual script. If there is an error, the error handler sets up a HTML::Template page using the associate attribute, and uses CGI::Application::Plugin::FillInForm to set any check boxes, etc. and then exits the script by outputing the form with the error, along with any messages.

    Here's more of the script

    if (@errors) { errorhandler (\@errors, "subscribers", $fifvalues); }; sub errorhandler { my @errorlist; my $errors = shift; my $tmplpage = shift; my $fifvalues = shift; foreach (@$errors) { my %one_record = (errormsg => $_); push (@errorlist, \%one_record); } $template = $self->load_tmpl($tmplpage.'.tmpl', associate => $query, die_on_bad_params => 0); $template->param( errorlist => \@errorlist); my $html_output = $self->fill_form( \$template->output, $fifvalues +); return $html_output; #exits application }

    Can you show me what the code might look like that preserves this return value? Thanks!


    —Brad
    "The important work of moving the world forward does not wait to be done by perfect men." George Eliot

      Unless you start messing around with print (which I wouldn't recommend until you understand CGI::App more), CGI::App will only display what you explictly return from a runmode.

      So to show the results of another sub that your runmode calls, you need to get it's results into your runmode's return:-

      # Perhaps like this... return errorhandler(\@errors) . "here2: " . Dumper(@errors); # ...or this... my $errors = errorhandler(\@errors); return $errors . "here2: " . Dumper(@errors);

          --k.


      Update: s/would/wouldn't/;