sub submit_request { my ($code_ref, ...) = @_; my $callback_id = "$code_ref"; $registered{ $callback_id } ||= [ 0, $code_ref ]; ++$registered{ $callback_id }[0]; _submit_request($callback_id, @_); } #### sub on_response { my $callback_id = shift; my $code_ref = $registered{ $callback_id }[1] or croak(...); --$registered{ $callback_id }[0] or delete( $registered{ $callback_id } ); $code_ref->(@_); }