With "at the same time" you don't want to say "in parallel", do you?
If you want to call the code from the "data" key, you can do so if you separate declaration from assignment, like this
my %general;
%general = (
...
then you can call it from "inside", like this:
results => sub { names(
first => $q->param('first'),
zip => $q->param('zip'),
);
$general{data}->();
},
BEWARE this creates a circular reference, which probably won't be a problem here, but you should be aware of the fact.
Update: OOPS! of course I didn't mean to call $general{results} - thanks AnomalousMonk - corrected
Further Update: obviously, the interpreter is less strict than the manual: according to perlref I'm allowed to say
&{$general{data}}() ("method 2") or $general{data}->() ("method 3", but when I tried it out before posting (with a simpler example), the syntax $general{data}() also worked. Perhaps this is a version specific thing (strawberry 5.14.2.1)