# 
# /*
#  * *********** WARNING **************
#  * This file generated by ModPerl::WrapXS/0.01
#  * Any changes made here will be lost
#  * ***********************************
#  * 01: lib/ModPerl/Code.pm:702
#  * 02: lib/ModPerl/WrapXS.pm:712
#  * 03: lib/ModPerl/WrapXS.pm:1105
#  * 04: Makefile.PL:413
#  * 05: Makefile.PL:317
#  * 06: Makefile.PL:53
#  */
# 

package ModPerl::MethodLookup;

use strict;
use warnings;

my $methods = {
          'BINMODE' => [
                         [
                           'Apache::RequestIO',
                           'Apache::RequestRec'
                         ]
                       ],
          'CLEAR' => [
                       [
                         'APR::Table',
                         'APR::Table'
                       ]
                     ],
          'CLOSE' => [
                       [
                         'Apache::RequestIO',
                         'Apache::RequestRec'
                       ]
                     ],
          'DELETE' => [
                        [
                          'APR::Table',
                          'APR::Table'
                        ]
                      ],
          'DESTROY' => [
                         [
                           'APR::ThreadMutex',
                           'APR::ThreadMutex'
                         ],
                         [
                           'Apache::SubRequest',
                           'Apache::SubRequest'
                         ],
                         [
                           'APR::Pool',
                           'APR::Pool'
                         ]
                       ],
          'EXISTS' => [
                        [
                          'APR::Table',
                          'APR::Table'
                        ]
                      ],
          'FETCH' => [
                       [
                         'APR::Table',
                         'APR::Table'
                       ]
                     ],
          'FILENO' => [
                        [
                          'Apache::RequestIO',
                          'Apache::RequestRec'
                        ]
                      ],
          'FIRSTKEY' => [
                          [
                            'APR::Table',
                            'APR::Table'
                          ]
                        ],
          'GETC' => [
                      [
                        'Apache::RequestIO',
                        'Apache::RequestRec'
                      ]
                    ],
          'LOG_MARK' => [
                          [
                            'Apache::Log',
                            undef
                          ]
                        ],
          'MODIFY_CODE_ATTRIBUTES' => [
                                        [
                                          'Apache::Filter',
                                          undef
                                        ]
                                      ],
          'NEXTKEY' => [
                         [
                           'APR::Table',
                           'APR::Table'
                         ]
                       ],
          'OPEN' => [
                      [
                        'Apache::RequestIO',
                        'Apache::RequestRec'
                      ]
                    ],
          'PRINT' => [
                       [
                         'Apache::RequestIO',
                         'Apache::RequestRec'
                       ],
                       [
                         'Apache::Filter',
                         'Apache::Filter'
                       ]
                     ],
          'PRINTF' => [
                        [
                          'Apache::RequestIO',
                          'Apache::RequestRec'
                        ]
                      ],
          'READ' => [
                      [
                        'Apache::RequestIO',
                        'Apache::RequestRec'
                      ]
                    ],
          'STORE' => [
                       [
                         'APR::Table',
                         'APR::Table'
                       ]
                     ],
          'TIEHANDLE' => [
                           [
                             'Apache::RequestIO',
                             'Apache::RequestRec'
                           ],
                           [
                             'Apache::Filter',
                             'Apache::Filter'
                           ]
                         ],
          'UNTIE' => [
                       [
                         'Apache::RequestIO',
                         'Apache::RequestRec'
                       ]
                     ],
          'WRITE' => [
                       [
                         'Apache::RequestIO',
                         'Apache::RequestRec'
                       ]
                     ],
          'aborted' => [
                         [
                           'Apache::Connection',
                           'Apache::Connection'
                         ]
                       ],
          'add' => [
                     [
                       'Apache::Module',
                       'Apache::Module'
                     ],
                     [
                       'APR::Table',
                       'APR::Table'
                     ]
                   ],
          'add_config' => [
                            [
                              'Apache::CmdParms',
                              'Apache::CmdParms'
                            ],
                            [
                              'Apache::ServerUtil',
                              'Apache::ServerRec'
                            ],
                            [
                              'Apache::RequestUtil',
                              'Apache::RequestRec'
                            ]
                          ],
          'add_input_filter' => [
                                  [
                                    'Apache::Filter',
                                    'Apache::Connection'
                                  ],
                                  [
                                    'Apache::Filter',
                                    'Apache::RequestRec'
                                  ]
                                ],
          'add_output_filter' => [
                                   [
                                     'Apache::Filter',
                                     'Apache::Connection'
                                   ],
                                   [
                                     'Apache::Filter',
                                     'Apache::RequestRec'
                                   ]
                                 ],
          'add_version_component' => [
                                       [
                                         'Apache::ServerUtil',
                                         'Apache::ServerRec'
                                       ]
                                     ],
          'addrs' => [
                       [
                         'Apache::ServerRec',
                         'Apache::ServerRec'
                       ]
                     ],
          'alert' => [
                       [
                         'Apache::Log',
                         undef
                       ]
                     ],
          'alloc_create' => [
                              [
                                'APR::Bucket',
                                'APR::Bucket'
                              ]
                            ],
          'alloc_destroy' => [
                               [
                                 'APR::Bucket',
                                 'APR::Bucket'
                               ]
                             ],
          'allow_methods' => [
                               [
                                 'Apache::Access',
                                 'Apache::RequestRec'
                               ]
                             ],
          'allow_options' => [
                               [
                                 'Apache::Access',
                                 'Apache::RequestRec'
                               ]
                             ],
          'allow_overrides' => [
                                 [
                                   'Apache::Access',
                                   'Apache::RequestRec'
                                 ]
                               ],
          'allowed' => [
                         [
                           'Apache::RequestRec',
                           'Apache::RequestRec'
                         ]
                       ],
          'allowed_methods' => [
                                 [
                                   'Apache::RequestRec',
                                   'Apache::RequestRec'
                                 ]
                               ],
          'allowed_xmethods' => [
                                  [
                                    'Apache::RequestRec',
                                    'Apache::RequestRec'
                                  ]
                                ],
          'ap_api_major_version' => [
                                      [
                                        'Apache::Module',
                                        'Apache::Module'
                                      ]
                                    ],
          'ap_api_minor_version' => [
                                      [
                                        'Apache::Module',
                                        'Apache::Module'
                                      ]
                                    ],
          'ap_auth_type' => [
                              [
                                'Apache::RequestRec',
                                'Apache::RequestRec'
                              ]
                            ],
          'args' => [
                      [
                        'Apache::RequestRec',
                        'Apache::RequestRec'
                      ],
                      [
                        'Apache::Directive',
                        'Apache::Directive'
                      ]
                    ],
          'args_how' => [
                          [
                            'Apache::Command',
                            'Apache::Command'
                          ]
                        ],
          'as_hash' => [
                         [
                           'Apache::Directive',
                           'Apache::Directive'
                         ]
                       ],
          'as_string' => [
                           [
                             'Apache::RequestUtil',
                             'Apache::RequestRec'
                           ],
                           [
                             'Apache::Directive',
                             'Apache::Directive'
                           ]
                         ],
          'assbackwards' => [
                              [
                                'Apache::RequestRec',
                                'Apache::RequestRec'
                              ]
                            ],
          'atime' => [
                       [
                         'APR::Finfo',
                         'APR::Finfo'
                       ]
                     ],
          'auth_name' => [
                           [
                             'Apache::Access',
                             'Apache::RequestRec'
                           ]
                         ],
          'auth_type' => [
                           [
                             'Apache::Access',
                             'Apache::RequestRec'
                           ]
                         ],
          'base_server' => [
                             [
                               'Apache::Connection',
                               'Apache::Connection'
                             ]
                           ],
          'bind' => [
                      [
                        'APR::Socket',
                        'APR::Socket'
                      ]
                    ],
          'bucket_alloc' => [
                              [
                                'Apache::Connection',
                                'Apache::Connection'
                              ],
                              [
                                'APR::Brigade',
                                'APR::Brigade'
                              ]
                            ],
          'bytes_sent' => [
                            [
                              'Apache::RequestRec',
                              'Apache::RequestRec'
                            ]
                          ],
          'c' => [
                   [
                     'Apache::Filter',
                     'Apache::Filter'
                   ]
                 ],
          'check_cmd_context' => [
                                   [
                                     'Apache::CmdParms',
                                     'Apache::CmdParms'
                                   ]
                                 ],
          'child_terminate' => [
                                 [
                                   'Apache::RequestUtil',
                                   'Apache::RequestRec'
                                 ]
                               ],
          'cleanup' => [
                         [
                           'APR::Brigade',
                           'APR::Brigade'
                         ]
                       ],
          'cleanup_for_exec' => [
                                  [
                                    'APR::Pool',
                                    'APR::Pool'
                                  ]
                                ],
          'cleanup_register' => [
                                  [
                                    'APR::Pool',
                                    'APR::Pool'
                                  ]
                                ],
          'clear' => [
                       [
                         'APR::Table',
                         'APR::Table'
                       ],
                       [
                         'APR::Pool',
                         'APR::Pool'
                       ]
                     ],
          'client_socket' => [
                               [
                                 'Apache::Connection',
                                 'Apache::Connection'
                               ]
                             ],
          'close' => [
                       [
                         'APR::Socket',
                         'APR::Socket'
                       ]
                     ],
          'cmd' => [
                     [
                       'Apache::CmdParms',
                       'Apache::CmdParms'
                     ]
                   ],
          'cmds' => [
                      [
                        'Apache::Module',
                        'Apache::Module'
                      ]
                    ],
          'compress' => [
                          [
                            'APR::Table',
                            'APR::Table'
                          ]
                        ],
          'concat' => [
                        [
                          'APR::Brigade',
                          'APR::Brigade'
                        ]
                      ],
          'conftree' => [
                          [
                            'Apache::Directive',
                            'Apache::Directive'
                          ]
                        ],
          'conn_config' => [
                             [
                               'Apache::Connection',
                               'Apache::Connection'
                             ]
                           ],
          'connect' => [
                         [
                           'APR::Socket',
                           'APR::Socket'
                         ]
                       ],
          'connection' => [
                            [
                              'Apache::RequestRec',
                              'Apache::RequestRec'
                            ]
                          ],
          'construct_server' => [
                                  [
                                    'Apache::URI',
                                    'Apache::RequestRec'
                                  ]
                                ],
          'construct_url' => [
                               [
                                 'Apache::URI',
                                 'Apache::RequestRec'
                               ]
                             ],
          'content_encoding' => [
                                  [
                                    'Apache::RequestRec',
                                    'Apache::RequestRec'
                                  ]
                                ],
          'content_languages' => [
                                   [
                                     'Apache::RequestRec',
                                     'Apache::RequestRec'
                                   ]
                                 ],
          'content_type' => [
                              [
                                'Apache::RequestRec',
                                'Apache::RequestRec'
                              ]
                            ],
          'context' => [
                         [
                           'Apache::CmdParms',
                           'Apache::CmdParms'
                         ]
                       ],
          'copy' => [
                      [
                        'APR::Table',
                        'APR::Table'
                      ]
                    ],
          'crit' => [
                      [
                        'Apache::Log',
                        undef
                      ]
                    ],
          'csize' => [
                       [
                         'APR::Finfo',
                         'APR::Finfo'
                       ]
                     ],
          'ctime' => [
                       [
                         'APR::Finfo',
                         'APR::Finfo'
                       ]
                     ],
          'ctx' => [
                     [
                       'Apache::Filter',
                       'Apache::Filter'
                     ]
                   ],
          'current_callback' => [
                                  [
                                    'ModPerl::Util',
                                    'ModPerl::Util'
                                  ]
                                ],
          'current_perl_id' => [
                                 [
                                   'ModPerl::Util',
                                   'ModPerl::Util'
                                 ]
                               ],
          'current_thread_id' => [
                                   [
                                     'APR::OS',
                                     'APR::OS'
                                   ]
                                 ],
          'custom_response' => [
                                 [
                                   'Apache::Response',
                                   'Apache::RequestRec'
                                 ]
                               ],
          'data' => [
                      [
                        'APR::Bucket',
                        'APR::Bucket'
                      ]
                    ],
          'debug' => [
                       [
                         'Apache::Log',
                         undef
                       ]
                     ],
          'decode' => [
                        [
                          'APR::Base64',
                          undef
                        ]
                      ],
          'default_type' => [
                              [
                                'Apache::RequestUtil',
                                'Apache::RequestRec'
                              ]
                            ],
          'delete' => [
                        [
                          'APR::Bucket',
                          'APR::Bucket'
                        ]
                      ],
          'destroy' => [
                         [
                           'APR::Bucket',
                           'APR::Bucket'
                         ],
                         [
                           'APR::Brigade',
                           'APR::Brigade'
                         ],
                         [
                           'APR::Pool',
                           'APR::Pool'
                         ]
                       ],
          'device' => [
                        [
                          'APR::Finfo',
                          'APR::Finfo'
                        ]
                      ],
          'die' => [
                     [
                       'Apache::HookRun',
                       'Apache::RequestRec'
                     ]
                   ],
          'dir_config' => [
                            [
                              'Apache::ServerUtil',
                              'Apache::ServerRec'
                            ],
                            [
                              'Apache::RequestUtil',
                              'Apache::RequestRec'
                            ]
                          ],
          'directive' => [
                           [
                             'Apache::CmdParms',
                             'Apache::CmdParms'
                           ],
                           [
                             'Apache::Directive',
                             'Apache::Directive'
                           ]
                         ],
          'discard_request_body' => [
                                      [
                                        'Apache::RequestIO',
                                        'Apache::RequestRec'
                                      ]
                                    ],
          'do' => [
                    [
                      'APR::Table',
                      'APR::Table'
                    ]
                  ],
          'document_root' => [
                               [
                                 'Apache::RequestUtil',
                                 'Apache::RequestRec'
                               ]
                             ],
          'emerg' => [
                       [
                         'Apache::Log',
                         undef
                       ]
                     ],
          'encode' => [
                        [
                          'APR::Base64',
                          undef
                        ]
                      ],
          'encode_len' => [
                            [
                              'APR::Base64',
                              'APR::Base64'
                            ]
                          ],
          'eos_create' => [
                            [
                              'APR::Bucket',
                              'APR::Bucket'
                            ]
                          ],
          'equal' => [
                       [
                         'APR::SockAddr',
                         'APR::SockAddr'
                       ]
                     ],
          'err_headers_out' => [
                                 [
                                   'Apache::RequestRec',
                                   'Apache::RequestRec'
                                 ]
                               ],
          'errmsg' => [
                        [
                          'Apache::Command',
                          'Apache::Command'
                        ]
                      ],
          'error' => [
                       [
                         'Apache::Log',
                         undef
                       ]
                     ],
          'error_fname' => [
                             [
                               'Apache::ServerRec',
                               'Apache::ServerRec'
                             ]
                           ],
          'error_log2stderr' => [
                                  [
                                    'Apache::ServerUtil',
                                    'Apache::ServerRec'
                                  ]
                                ],
          'escape_path' => [
                             [
                               'Apache::Util',
                               'Apache::Util'
                             ]
                           ],
          'exists_config_define' => [
                                      [
                                        'Apache::ServerUtil',
                                        'Apache::ServerUtil'
                                      ]
                                    ],
          'fflush' => [
                        [
                          'Apache::Filter',
                          'Apache::Filter'
                        ]
                      ],
          'filename' => [
                          [
                            'Apache::RequestRec',
                            'Apache::RequestRec'
                          ],
                          [
                            'Apache::Directive',
                            'Apache::Directive'
                          ]
                        ],
          'filepath_name_get' => [
                                   [
                                     'APR::Util',
                                     'APR::Util'
                                   ]
                                 ],
          'filetype' => [
                          [
                            'APR::Finfo',
                            'APR::Finfo'
                          ]
                        ],
          'filter_flush' => [
                              [
                                'Apache::Filter',
                                'APR::Brigade'
                              ]
                            ],
          'find_linked_module' => [
                                    [
                                      'Apache::Module',
                                      'Apache::Module'
                                    ]
                                  ],
          'finfo' => [
                       [
                         'Apache::RequestRec',
                         'Apache::RequestRec'
                       ]
                     ],
          'first' => [
                       [
                         'APR::Brigade',
                         'APR::Brigade'
                       ]
                     ],
          'first_child' => [
                             [
                               'Apache::Directive',
                               'Apache::Directive'
                             ]
                           ],
          'flatten' => [
                         [
                           'APR::Brigade',
                           'APR::Brigade'
                         ]
                       ],
          'flush_create' => [
                              [
                                'APR::Bucket',
                                'APR::Bucket'
                              ]
                            ],
          'fname' => [
                       [
                         'APR::Finfo',
                         'APR::Finfo'
                       ]
                     ],
          'format' => [
                        [
                          'APR::UUID',
                          undef
                        ]
                      ],
          'format_size' => [
                             [
                               'APR::String',
                               'APR::String'
                             ]
                           ],
          'fragment' => [
                          [
                            'APR::URI',
                            'APR::URI'
                          ]
                        ],
          'frec' => [
                      [
                        'Apache::Filter',
                        'Apache::Filter'
                      ]
                    ],
          'get' => [
                     [
                       'APR::Table',
                       undef
                     ]
                   ],
          'get_basic_auth_pw' => [
                                   [
                                     'Apache::Access',
                                     undef
                                   ]
                                 ],
          'get_brigade' => [
                             [
                               'Apache::Filter',
                               'Apache::Filter'
                             ]
                           ],
          'get_client_block' => [
                                  [
                                    'Apache::RequestIO',
                                    'Apache::RequestRec'
                                  ]
                                ],
          'get_config' => [
                            [
                              'Apache::Module',
                              'Apache::Module'
                            ]
                          ],
          'get_handlers' => [
                              [
                                'Apache::ServerUtil',
                                'Apache::ServerRec'
                              ],
                              [
                                'Apache::RequestUtil',
                                'Apache::RequestRec'
                              ]
                            ],
          'get_limit_req_body' => [
                                    [
                                      'Apache::RequestUtil',
                                      'Apache::RequestRec'
                                    ]
                                  ],
          'get_remote_host' => [
                                 [
                                   'Apache::Connection',
                                   'Apache::Connection'
                                 ]
                               ],
          'get_remote_logname' => [
                                    [
                                      'Apache::Access',
                                      'Apache::RequestRec'
                                    ]
                                  ],
          'get_server_name' => [
                                 [
                                   'Apache::RequestUtil',
                                   'Apache::RequestRec'
                                 ]
                               ],
          'get_server_port' => [
                                 [
                                   'Apache::RequestUtil',
                                   'Apache::RequestRec'
                                 ]
                               ],
          'get_status_line' => [
                                 [
                                   'Apache::RequestUtil',
                                   'Apache::RequestUtil'
                                 ]
                               ],
          'group' => [
                       [
                         'APR::Finfo',
                         'APR::Finfo'
                       ]
                     ],
          'handler' => [
                         [
                           'Apache::RequestRec',
                           'Apache::RequestRec'
                         ]
                       ],
          'header_only' => [
                             [
                               'Apache::RequestRec',
                               'Apache::RequestRec'
                             ]
                           ],
          'headers_in' => [
                            [
                              'Apache::RequestRec',
                              'Apache::RequestRec'
                            ]
                          ],
          'headers_out' => [
                             [
                               'Apache::RequestRec',
                               'Apache::RequestRec'
                             ]
                           ],
          'hostinfo' => [
                          [
                            'APR::URI',
                            'APR::URI'
                          ]
                        ],
          'hostname' => [
                          [
                            'APR::URI',
                            'APR::URI'
                          ],
                          [
                            'Apache::RequestRec',
                            'Apache::RequestRec'
                          ]
                        ],
          'ht_time' => [
                         [
                           'Apache::Util',
                           'Apache::Util'
                         ]
                       ],
          'id' => [
                    [
                      'Apache::Connection',
                      'Apache::Connection'
                    ]
                  ],
          'info' => [
                      [
                        'Apache::CmdParms',
                        'Apache::CmdParms'
                      ],
                      [
                        'Apache::Log',
                        undef
                      ]
                    ],
          'inode' => [
                       [
                         'APR::Finfo',
                         'APR::Finfo'
                       ]
                     ],
          'input_filters' => [
                               [
                                 'Apache::Connection',
                                 'Apache::Connection'
                               ],
                               [
                                 'Apache::RequestRec',
                                 'Apache::RequestRec'
                               ]
                             ],
          'insert_after' => [
                              [
                                'APR::Bucket',
                                'APR::Bucket'
                              ]
                            ],
          'insert_before' => [
                               [
                                 'APR::Bucket',
                                 'APR::Bucket'
                               ]
                             ],
          'insert_head' => [
                             [
                               'APR::Brigade',
                               'APR::Brigade'
                             ]
                           ],
          'insert_tail' => [
                             [
                               'APR::Brigade',
                               'APR::Brigade'
                             ]
                           ],
          'internal_fast_redirect' => [
                                        [
                                          'Apache::SubRequest',
                                          'Apache::RequestRec'
                                        ]
                                      ],
          'internal_redirect' => [
                                   [
                                     'Apache::SubRequest',
                                     'Apache::RequestRec'
                                   ]
                                 ],
          'internal_redirect_handler' => [
                                           [
                                             'Apache::SubRequest',
                                             'Apache::RequestRec'
                                           ]
                                         ],
          'invoke_handler' => [
                                [
                                  'Apache::HookRun',
                                  'Apache::RequestRec'
                                ]
                              ],
          'ip_get' => [
                        [
                          'APR::SockAddr',
                          'APR::SockAddr'
                        ]
                      ],
          'is_ancestor' => [
                             [
                               'APR::Pool',
                               'APR::Pool'
                             ]
                           ],
          'is_empty' => [
                          [
                            'APR::Brigade',
                            'APR::Brigade'
                          ]
                        ],
          'is_eos' => [
                        [
                          'APR::Bucket',
                          'APR::Bucket'
                        ]
                      ],
          'is_flush' => [
                          [
                            'APR::Bucket',
                            'APR::Bucket'
                          ]
                        ],
          'is_initial_req' => [
                                [
                                  'Apache::RequestUtil',
                                  'Apache::RequestRec'
                                ]
                              ],
          'is_perl_option_enabled' => [
                                        [
                                          'Apache::ServerUtil',
                                          'Apache::ServerRec'
                                        ],
                                        [
                                          'Apache::RequestUtil',
                                          'Apache::RequestRec'
                                        ]
                                      ],
          'is_virtual' => [
                            [
                              'Apache::ServerRec',
                              'Apache::ServerRec'
                            ]
                          ],
          'keep_alive' => [
                            [
                              'Apache::ServerRec',
                              'Apache::ServerRec'
                            ]
                          ],
          'keep_alive_max' => [
                                [
                                  'Apache::ServerRec',
                                  'Apache::ServerRec'
                                ]
                              ],
          'keep_alive_timeout' => [
                                    [
                                      'Apache::ServerRec',
                                      'Apache::ServerRec'
                                    ]
                                  ],
          'keepalive' => [
                           [
                             'Apache::Connection',
                             'Apache::Connection'
                           ]
                         ],
          'keepalives' => [
                            [
                              'Apache::Connection',
                              'Apache::Connection'
                            ]
                          ],
          'last' => [
                      [
                        'APR::Brigade',
                        'APR::Brigade'
                      ]
                    ],
          'length' => [
                        [
                          'APR::Bucket',
                          'APR::Bucket'
                        ],
                        [
                          'APR::Brigade',
                          'APR::Brigade'
                        ]
                      ],
          'limit_req_fields' => [
                                  [
                                    'Apache::ServerRec',
                                    'Apache::ServerRec'
                                  ]
                                ],
          'limit_req_fieldsize' => [
                                     [
                                       'Apache::ServerRec',
                                       'Apache::ServerRec'
                                     ]
                                   ],
          'limit_req_line' => [
                                [
                                  'Apache::ServerRec',
                                  'Apache::ServerRec'
                                ]
                              ],
          'line_num' => [
                          [
                            'Apache::Directive',
                            'Apache::Directive'
                          ]
                        ],
          'listen' => [
                        [
                          'APR::Socket',
                          'APR::Socket'
                        ]
                      ],
          'loaded' => [
                        [
                          'Apache::Module',
                          'Apache::Module'
                        ]
                      ],
          'local_addr' => [
                            [
                              'Apache::Connection',
                              'Apache::Connection'
                            ]
                          ],
          'local_host' => [
                            [
                              'Apache::Connection',
                              'Apache::Connection'
                            ]
                          ],
          'local_ip' => [
                          [
                            'Apache::Connection',
                            'Apache::Connection'
                          ]
                        ],
          'location' => [
                          [
                            'Apache::RequestUtil',
                            'Apache::RequestRec'
                          ]
                        ],
          'location_merge' => [
                                [
                                  'Apache::RequestUtil',
                                  'Apache::RequestRec'
                                ]
                              ],
          'lock' => [
                      [
                        'APR::ThreadMutex',
                        'APR::ThreadMutex'
                      ]
                    ],
          'log' => [
                     [
                       'Apache::Log',
                       'Apache::ServerRec'
                     ],
                     [
                       'Apache::Log',
                       'Apache::RequestRec'
                     ]
                   ],
          'log_error' => [
                           [
                             'Apache::Log',
                             undef
                           ],
                           [
                             'Apache::Log',
                             undef
                           ]
                         ],
          'log_pid' => [
                         [
                           'Apache::Log',
                           'Apache::Log'
                         ]
                       ],
          'log_reason' => [
                            [
                              'Apache::Log',
                              'Apache::RequestRec'
                            ]
                          ],
          'log_rerror' => [
                            [
                              'Apache::Log',
                              undef
                            ]
                          ],
          'log_serror' => [
                            [
                              'Apache::Log',
                              undef
                            ]
                          ],
          'loglevel' => [
                          [
                            'Apache::ServerRec',
                            'Apache::ServerRec'
                          ]
                        ],
          'lookup' => [
                        [
                          'Apache::Directive',
                          undef
                        ]
                      ],
          'lookup_defaults' => [
                                 [
                                   'Apache::ServerRec',
                                   'Apache::ServerRec'
                                 ]
                               ],
          'lookup_dirent' => [
                               [
                                 'Apache::SubRequest',
                                 'Apache::RequestRec'
                               ]
                             ],
          'lookup_file' => [
                             [
                               'Apache::SubRequest',
                               'Apache::RequestRec'
                             ]
                           ],
          'lookup_method_uri' => [
                                   [
                                     'Apache::SubRequest',
                                     'Apache::RequestRec'
                                   ]
                                 ],
          'lookup_uri' => [
                            [
                              'Apache::SubRequest',
                              'Apache::RequestRec'
                            ]
                          ],
          'main' => [
                      [
                        'Apache::RequestRec',
                        'Apache::RequestRec'
                      ]
                    ],
          'make' => [
                      [
                        'APR::Table',
                        'APR::Table'
                      ]
                    ],
          'make_etag' => [
                           [
                             'Apache::Response',
                             'Apache::RequestRec'
                           ]
                         ],
          'meets_conditions' => [
                                  [
                                    'Apache::Response',
                                    'Apache::RequestRec'
                                  ]
                                ],
          'merge' => [
                       [
                         'APR::Table',
                         'APR::Table'
                       ]
                     ],
          'method' => [
                        [
                          'Apache::RequestRec',
                          'Apache::RequestRec'
                        ]
                      ],
          'method_is_limited' => [
                                   [
                                     'Apache::CmdParms',
                                     'Apache::CmdParms'
                                   ]
                                 ],
          'method_number' => [
                               [
                                 'Apache::RequestRec',
                                 'Apache::RequestRec'
                               ]
                             ],
          'method_register' => [
                                 [
                                   'Apache::ServerUtil',
                                   'Apache::ServerRec'
                                 ]
                               ],
          'module_config' => [
                               [
                                 'Apache::ServerRec',
                                 'Apache::ServerRec'
                               ]
                             ],
          'module_index' => [
                              [
                                'Apache::Module',
                                'Apache::Module'
                              ]
                            ],
          'mtime' => [
                       [
                         'APR::Finfo',
                         'APR::Finfo'
                       ],
                       [
                         'Apache::RequestRec',
                         'Apache::RequestRec'
                       ]
                     ],
          'name' => [
                      [
                        'Apache::FilterRec',
                        'Apache::FilterRec'
                      ],
                      [
                        'APR::Finfo',
                        'APR::Finfo'
                      ],
                      [
                        'APR::BucketType',
                        'APR::BucketType'
                      ],
                      [
                        'Apache::Module',
                        'Apache::Module'
                      ],
                      [
                        'Apache::Command',
                        'Apache::Command'
                      ]
                    ],
          'names' => [
                       [
                         'Apache::ServerRec',
                         'Apache::ServerRec'
                       ]
                     ],
          'new' => [
                     [
                       'APR::Bucket',
                       'APR::Bucket'
                     ],
                     [
                       'APR::UUID',
                       'APR::UUID'
                     ],
                     [
                       'Apache::RequestUtil',
                       'Apache::RequestRec'
                     ],
                     [
                       'APR::Brigade',
                       'APR::Brigade'
                     ],
                     [
                       'APR::ThreadMutex',
                       'APR::ThreadMutex'
                     ],
                     [
                       'APR::IpSubnet',
                       'APR::IpSubnet'
                     ],
                     [
                       'APR::Pool',
                       'APR::Pool'
                     ]
                   ],
          'next' => [
                      [
                        'Apache::ServerRec',
                        'Apache::ServerRec'
                      ],
                      [
                        'Apache::Module',
                        'Apache::Module'
                      ],
                      [
                        'APR::Brigade',
                        'APR::Brigade'
                      ],
                      [
                        'Apache::Command',
                        'Apache::Command'
                      ],
                      [
                        'Apache::RequestRec',
                        'Apache::RequestRec'
                      ],
                      [
                        'Apache::Directive',
                        'Apache::Directive'
                      ],
                      [
                        'Apache::Filter',
                        'Apache::Filter'
                      ]
                    ],
          'nlink' => [
                       [
                         'APR::Finfo',
                         'APR::Finfo'
                       ]
                     ],
          'no_cache' => [
                          [
                            'Apache::RequestUtil',
                            'Apache::RequestRec'
                          ]
                        ],
          'no_local_copy' => [
                               [
                                 'Apache::RequestRec',
                                 'Apache::RequestRec'
                               ]
                             ],
          'note_auth_failure' => [
                                   [
                                     'Apache::Access',
                                     'Apache::RequestRec'
                                   ]
                                 ],
          'note_basic_auth_failure' => [
                                         [
                                           'Apache::Access',
                                           'Apache::RequestRec'
                                         ]
                                       ],
          'note_digest_auth_failure' => [
                                          [
                                            'Apache::Access',
                                            'Apache::RequestRec'
                                          ]
                                        ],
          'notes' => [
                       [
                         'Apache::Connection',
                         'Apache::Connection'
                       ],
                       [
                         'Apache::RequestRec',
                         'Apache::RequestRec'
                       ]
                     ],
          'notice' => [
                        [
                          'Apache::Log',
                          undef
                        ]
                      ],
          'opt_get' => [
                         [
                           'APR::Socket',
                           'APR::Socket'
                         ]
                       ],
          'opt_set' => [
                         [
                           'APR::Socket',
                           'APR::Socket'
                         ]
                       ],
          'output_filters' => [
                                [
                                  'Apache::Connection',
                                  'Apache::Connection'
                                ],
                                [
                                  'Apache::RequestRec',
                                  'Apache::RequestRec'
                                ]
                              ],
          'overlap' => [
                         [
                           'APR::Table',
                           'APR::Table'
                         ]
                       ],
          'overlay' => [
                         [
                           'APR::Table',
                           'APR::Table'
                         ]
                       ],
          'override' => [
                          [
                            'Apache::CmdParms',
                            'Apache::CmdParms'
                          ]
                        ],
          'parent' => [
                        [
                          'Apache::Directive',
                          'Apache::Directive'
                        ]
                      ],
          'parent_get' => [
                            [
                              'APR::Pool',
                              'APR::Pool'
                            ]
                          ],
          'parse' => [
                       [
                         'APR::UUID',
                         'APR::UUID'
                       ],
                       [
                         'APR::URI',
                         'APR::URI'
                       ]
                     ],
          'parse_http' => [
                            [
                              'APR::Date',
                              'APR::Date'
                            ]
                          ],
          'parse_rfc' => [
                           [
                             'APR::Date',
                             'APR::Date'
                           ]
                         ],
          'parse_uri' => [
                           [
                             'Apache::URI',
                             'Apache::RequestRec'
                           ]
                         ],
          'parsed_uri' => [
                            [
                              'Apache::URI',
                              'Apache::RequestRec'
                            ]
                          ],
          'pass_brigade' => [
                              [
                                'Apache::Filter',
                                'Apache::Filter'
                              ]
                            ],
          'password' => [
                          [
                            'APR::URI',
                            'APR::URI'
                          ]
                        ],
          'password_get' => [
                              [
                                'APR::Util',
                                'APR::Util'
                              ]
                            ],
          'password_validate' => [
                                   [
                                     'APR::Util',
                                     'APR::Util'
                                   ]
                                 ],
          'path' => [
                      [
                        'Apache::CmdParms',
                        'Apache::CmdParms'
                      ],
                      [
                        'Apache::ServerRec',
                        'Apache::ServerRec'
                      ],
                      [
                        'APR::URI',
                        'APR::URI'
                      ]
                    ],
          'path_info' => [
                           [
                             'Apache::RequestRec',
                             'Apache::RequestRec'
                           ]
                         ],
          'pconf' => [
                       [
                         'Apache::Process',
                         'Apache::Process'
                       ]
                     ],
          'per_dir_config' => [
                                [
                                  'Apache::RequestRec',
                                  'Apache::RequestRec'
                                ]
                              ],
          'pnotes' => [
                        [
                          'Apache::RequestUtil',
                          'Apache::RequestRec'
                        ]
                      ],
          'poll' => [
                      [
                        'APR::Socket',
                        'APR::Socket'
                      ]
                    ],
          'pool' => [
                      [
                        'Apache::CmdParms',
                        'Apache::CmdParms'
                      ],
                      [
                        'Apache::Connection',
                        'Apache::Connection'
                      ],
                      [
                        'Apache::Process',
                        'Apache::Process'
                      ],
                      [
                        'APR::Brigade',
                        'APR::Brigade'
                      ],
                      [
                        'Apache::RequestRec',
                        'Apache::RequestRec'
                      ]
                    ],
          'pool_get' => [
                          [
                            'APR::ThreadMutex',
                            'APR::ThreadMutex'
                          ]
                        ],
          'port' => [
                      [
                        'APR::SockAddr',
                        'APR::SockAddr'
                      ],
                      [
                        'Apache::ServerRec',
                        'Apache::ServerRec'
                      ],
                      [
                        'APR::URI',
                        'APR::URI'
                      ]
                    ],
          'port_of_scheme' => [
                                [
                                  'APR::URI',
                                  'APR::URI'
                                ]
                              ],
          'prev' => [
                      [
                        'APR::Brigade',
                        'APR::Brigade'
                      ],
                      [
                        'Apache::RequestRec',
                        'Apache::RequestRec'
                      ]
                    ],
          'print' => [
                       [
                         'Apache::RequestIO',
                         'Apache::RequestRec'
                       ],
                       [
                         'Apache::Filter',
                         'Apache::Filter'
                       ]
                     ],
          'printf' => [
                        [
                          'Apache::RequestIO',
                          'Apache::RequestRec'
                        ]
                      ],
          'process' => [
                         [
                           'Apache::ServerRec',
                           'Apache::ServerRec'
                         ]
                       ],
          'protection' => [
                            [
                              'APR::Finfo',
                              'APR::Finfo'
                            ]
                          ],
          'proto_input_filters' => [
                                     [
                                       'Apache::RequestRec',
                                       'Apache::RequestRec'
                                     ]
                                   ],
          'proto_num' => [
                           [
                             'Apache::RequestRec',
                             'Apache::RequestRec'
                           ]
                         ],
          'proto_output_filters' => [
                                      [
                                        'Apache::RequestRec',
                                        'Apache::RequestRec'
                                      ]
                                    ],
          'protocol' => [
                          [
                            'Apache::RequestRec',
                            'Apache::RequestRec'
                          ]
                        ],
          'proxyreq' => [
                          [
                            'Apache::RequestRec',
                            'Apache::RequestRec'
                          ]
                        ],
          'psignature' => [
                            [
                              'Apache::RequestUtil',
                              'Apache::RequestRec'
                            ]
                          ],
          'push_handlers' => [
                               [
                                 'Apache::ServerUtil',
                                 'Apache::ServerRec'
                               ],
                               [
                                 'Apache::RequestUtil',
                                 'Apache::RequestRec'
                               ]
                             ],
          'puts' => [
                      [
                        'Apache::RequestIO',
                        'Apache::RequestRec'
                      ]
                    ],
          'query' => [
                       [
                         'APR::URI',
                         'APR::URI'
                       ],
                       [
                         'Apache::MPM',
                         'Apache::MPM'
                       ]
                     ],
          'r' => [
                   [
                     'Apache::Filter',
                     'Apache::Filter'
                   ]
                 ],
          'rationalize_mtime' => [
                                   [
                                     'Apache::Response',
                                     'Apache::RequestRec'
                                   ]
                                 ],
          'read' => [
                      [
                        'APR::Bucket',
                        'APR::Bucket'
                      ],
                      [
                        'Apache::RequestIO',
                        'Apache::RequestRec'
                      ],
                      [
                        'Apache::Filter',
                        'Apache::Filter'
                      ]
                    ],
          'recv' => [
                      [
                        'APR::Socket',
                        'APR::Socket'
                      ]
                    ],
          'recvfrom' => [
                          [
                            'APR::Socket',
                            'APR::Socket'
                          ]
                        ],
          'remote_addr' => [
                             [
                               'Apache::Connection',
                               'Apache::Connection'
                             ]
                           ],
          'remote_host' => [
                             [
                               'Apache::Connection',
                               'Apache::Connection'
                             ]
                           ],
          'remote_ip' => [
                           [
                             'Apache::Connection',
                             'Apache::Connection'
                           ]
                         ],
          'remove' => [
                        [
                          'APR::Bucket',
                          'APR::Bucket'
                        ],
                        [
                          'Apache::Filter',
                          'Apache::Filter'
                        ]
                      ],
          'remove_loaded_module' => [
                                      [
                                        'Apache::Module',
                                        'Apache::Module'
                                      ]
                                    ],
          'req_override' => [
                              [
                                'Apache::Command',
                                'Apache::Command'
                              ]
                            ],
          'request' => [
                         [
                           'Apache::RequestUtil',
                           'Apache'
                         ]
                       ],
          'request_config' => [
                                [
                                  'Apache::RequestRec',
                                  'Apache::RequestRec'
                                ]
                              ],
          'request_time' => [
                              [
                                'Apache::RequestRec',
                                'Apache::RequestRec'
                              ]
                            ],
          'requires' => [
                          [
                            'Apache::Access',
                            'Apache::RequestRec'
                          ]
                        ],
          'restart_count' => [
                               [
                                 'Apache::ServerUtil',
                                 'Apache::ServerUtil'
                               ]
                             ],
          'rflush' => [
                        [
                          'Apache::RequestIO',
                          'Apache::RequestRec'
                        ]
                      ],
          'rpath' => [
                       [
                         'APR::URI',
                         'APR::URI'
                       ]
                     ],
          'run' => [
                     [
                       'Apache::SubRequest',
                       'Apache::SubRequest'
                     ]
                   ],
          'run_access_checker' => [
                                    [
                                      'Apache::HookRun',
                                      'Apache::RequestRec'
                                    ]
                                  ],
          'run_auth_checker' => [
                                  [
                                    'Apache::HookRun',
                                    'Apache::RequestRec'
                                  ]
                                ],
          'run_check_user_id' => [
                                   [
                                     'Apache::HookRun',
                                     'Apache::RequestRec'
                                   ]
                                 ],
          'run_fixups' => [
                            [
                              'Apache::HookRun',
                              'Apache::RequestRec'
                            ]
                          ],
          'run_handler' => [
                             [
                               'Apache::HookRun',
                               'Apache::RequestRec'
                             ]
                           ],
          'run_header_parser' => [
                                   [
                                     'Apache::HookRun',
                                     'Apache::RequestRec'
                                   ]
                                 ],
          'run_log_transaction' => [
                                     [
                                       'Apache::HookRun',
                                       'Apache::RequestRec'
                                     ]
                                   ],
          'run_map_to_storage' => [
                                    [
                                      'Apache::HookRun',
                                      'Apache::RequestRec'
                                    ]
                                  ],
          'run_post_read_request' => [
                                       [
                                         'Apache::HookRun',
                                         'Apache::RequestRec'
                                       ]
                                     ],
          'run_translate_name' => [
                                    [
                                      'Apache::HookRun',
                                      'Apache::RequestRec'
                                    ]
                                  ],
          'run_type_checker' => [
                                  [
                                    'Apache::HookRun',
                                    'Apache::RequestRec'
                                  ]
                                ],
          'satisfies' => [
                           [
                             'Apache::Access',
                             'Apache::RequestRec'
                           ]
                         ],
          'sbh' => [
                     [
                       'Apache::Connection',
                       'Apache::Connection'
                     ]
                   ],
          'scheme' => [
                        [
                          'APR::URI',
                          'APR::URI'
                        ]
                      ],
          'seen_eos' => [
                          [
                            'Apache::Filter',
                            'Apache::Filter'
                          ]
                        ],
          'send' => [
                      [
                        'APR::Socket',
                        'APR::Socket'
                      ]
                    ],
          'send_cgi_header' => [
                                 [
                                   'Apache::Response',
                                   'Apache::RequestRec'
                                 ]
                               ],
          'send_error_response' => [
                                     [
                                       'Apache::Response',
                                       'Apache::RequestRec'
                                     ]
                                   ],
          'send_mmap' => [
                           [
                             'Apache::Response',
                             'Apache::RequestRec'
                           ]
                         ],
          'sendfile' => [
                          [
                            'Apache::RequestIO',
                            'Apache::RequestRec'
                          ]
                        ],
          'sendto' => [
                        [
                          'APR::Socket',
                          'APR::Socket'
                        ]
                      ],
          'server' => [
                        [
                          'Apache::CmdParms',
                          'Apache::CmdParms'
                        ],
                        [
                          'Apache::ServerUtil',
                          'Apache'
                        ],
                        [
                          'Apache::RequestRec',
                          'Apache::RequestRec'
                        ]
                      ],
          'server_admin' => [
                              [
                                'Apache::ServerRec',
                                'Apache::ServerRec'
                              ]
                            ],
          'server_hostname' => [
                                 [
                                   'Apache::ServerRec',
                                   'Apache::ServerRec'
                                 ]
                               ],
          'server_root_relative' => [
                                      [
                                        'Apache::ServerUtil',
                                        'Apache::ServerUtil'
                                      ]
                                    ],
          'server_shutdown_cleanup_register' => [
                                                  [
                                                    'Apache::ServerUtil',
                                                    'Apache::ServerUtil'
                                                  ]
                                                ],
          'set' => [
                     [
                       'APR::Table',
                       'APR::Table'
                     ]
                   ],
          'set_basic_credentials' => [
                                       [
                                         'Apache::RequestUtil',
                                         'Apache::RequestRec'
                                       ]
                                     ],
          'set_content_length' => [
                                    [
                                      'Apache::Response',
                                      'Apache::RequestRec'
                                    ]
                                  ],
          'set_etag' => [
                          [
                            'Apache::Response',
                            'Apache::RequestRec'
                          ]
                        ],
          'set_handlers' => [
                              [
                                'Apache::ServerUtil',
                                'Apache::ServerRec'
                              ],
                              [
                                'Apache::RequestUtil',
                                'Apache::RequestRec'
                              ]
                            ],
          'set_keepalive' => [
                               [
                                 'Apache::Response',
                                 'Apache::RequestRec'
                               ]
                             ],
          'set_last_modified' => [
                                   [
                                     'Apache::Response',
                                     'Apache::RequestRec'
                                   ]
                                 ],
          'setaside' => [
                          [
                            'APR::Bucket',
                            'APR::Bucket'
                          ]
                        ],
          'setup_client_block' => [
                                    [
                                      'Apache::RequestIO',
                                      'Apache::RequestRec'
                                    ]
                                  ],
          'short_name' => [
                            [
                              'Apache::Process',
                              'Apache::Process'
                            ]
                          ],
          'should_client_block' => [
                                     [
                                       'Apache::RequestIO',
                                       'Apache::RequestRec'
                                     ]
                                   ],
          'size' => [
                      [
                        'APR::Finfo',
                        'APR::Finfo'
                      ]
                    ],
          'slurp_filename' => [
                                [
                                  'Apache::RequestUtil',
                                  'Apache::RequestRec'
                                ]
                              ],
          'some_auth_required' => [
                                    [
                                      'Apache::Access',
                                      'Apache::RequestRec'
                                    ]
                                  ],
          'spawn_proc_prog' => [
                                 [
                                   'Apache::SubProcess',
                                   undef
                                 ]
                               ],
          'special_list_call' => [
                                   [
                                     'ModPerl::Global',
                                     'ModPerl::Global'
                                   ]
                                 ],
          'special_list_clear' => [
                                    [
                                      'ModPerl::Global',
                                      'ModPerl::Global'
                                    ]
                                  ],
          'special_list_register' => [
                                       [
                                         'ModPerl::Global',
                                         'ModPerl::Global'
                                       ]
                                     ],
          'split' => [
                       [
                         'APR::Brigade',
                         'APR::Brigade'
                       ]
                     ],
          'start' => [
                       [
                         'APR::Bucket',
                         'APR::Bucket'
                       ]
                     ],
          'stat' => [
                      [
                        'APR::Finfo',
                        'APR::Finfo'
                      ]
                    ],
          'status' => [
                        [
                          'Apache::RequestRec',
                          'Apache::RequestRec'
                        ]
                      ],
          'status_line' => [
                             [
                               'Apache::RequestRec',
                               'Apache::RequestRec'
                             ]
                           ],
          'strerror' => [
                          [
                            'APR::Error',
                            'APR::Error'
                          ]
                        ],
          'subprocess_env' => [
                                [
                                  'Apache::RequestRec',
                                  'Apache::RequestRec'
                                ]
                              ],
          'tag' => [
                     [
                       'APR::Pool',
                       'APR::Pool'
                     ]
                   ],
          'temp_pool' => [
                           [
                             'Apache::CmdParms',
                             'Apache::CmdParms'
                           ]
                         ],
          'test' => [
                      [
                        'APR::IpSubnet',
                        'APR::IpSubnet'
                      ]
                    ],
          'the_request' => [
                             [
                               'Apache::RequestRec',
                               'Apache::RequestRec'
                             ]
                           ],
          'timeout' => [
                         [
                           'Apache::ServerRec',
                           'Apache::ServerRec'
                         ]
                       ],
          'timeout_get' => [
                             [
                               'APR::Socket',
                               'APR::Socket'
                             ]
                           ],
          'timeout_set' => [
                             [
                               'APR::Socket',
                               'APR::Socket'
                             ]
                           ],
          'top_module' => [
                            [
                              'Apache::Module',
                              'Apache::Module'
                            ]
                          ],
          'trylock' => [
                         [
                           'APR::ThreadMutex',
                           'APR::ThreadMutex'
                         ]
                       ],
          'type' => [
                      [
                        'APR::Bucket',
                        'APR::Bucket'
                      ]
                    ],
          'unescape_url' => [
                              [
                                'Apache::URI',
                                'Apache::URI'
                              ]
                            ],
          'unload_package' => [
                                [
                                  'ModPerl::Util',
                                  'ModPerl::Util'
                                ]
                              ],
          'unlock' => [
                        [
                          'APR::ThreadMutex',
                          'APR::ThreadMutex'
                        ]
                      ],
          'unparse' => [
                         [
                           'APR::URI',
                           'APR::URI'
                         ]
                       ],
          'unparsed_uri' => [
                              [
                                'Apache::RequestRec',
                                'Apache::RequestRec'
                              ]
                            ],
          'unset' => [
                       [
                         'APR::Table',
                         'APR::Table'
                       ]
                     ],
          'untaint' => [
                         [
                           'ModPerl::Util',
                           'ModPerl::Util'
                         ]
                       ],
          'update_mtime' => [
                              [
                                'Apache::Response',
                                'Apache::RequestRec'
                              ]
                            ],
          'uri' => [
                     [
                       'Apache::RequestRec',
                       'Apache::RequestRec'
                     ]
                   ],
          'used_path_info' => [
                                [
                                  'Apache::RequestRec',
                                  'Apache::RequestRec'
                                ]
                              ],
          'user' => [
                      [
                        'APR::Finfo',
                        'APR::Finfo'
                      ],
                      [
                        'APR::URI',
                        'APR::URI'
                      ],
                      [
                        'Apache::RequestRec',
                        'Apache::RequestRec'
                      ]
                    ],
          'valid' => [
                       [
                         'APR::Finfo',
                         'APR::Finfo'
                       ]
                     ],
          'warn' => [
                      [
                        'Apache::Log',
                        undef
                      ],
                      [
                        'Apache::Log',
                        undef
                      ],
                      [
                        'Apache::Log',
                        undef
                      ]
                    ],
          'wild_names' => [
                            [
                              'Apache::ServerRec',
                              'Apache::ServerRec'
                            ]
                          ],
          'write' => [
                       [
                         'Apache::RequestIO',
                         'Apache::RequestRec'
                       ]
                     ]
        };


use base qw(Exporter);

our @EXPORT = qw(print_method print_module print_object);

use constant MODULE => 0;
use constant OBJECT  => 1;

my $modules;
my $objects;

sub _get_modules {
    for my $method (sort keys %$methods) { 
        for my $item ( @{ $methods->{$method} }) {
            push @{ $modules->{$item->[MODULE]} }, [$method, $item->[OBJECT]];
        }
    }
}

sub _get_objects {
    for my $method (sort keys %$methods) { 
        for my $item ( @{ $methods->{$method} }) {
            next unless defined $item->[OBJECT];
            push @{ $objects->{$item->[OBJECT]} }, [$method, $item->[MODULE]];
        }
    }
}

# if there is only one replacement method in 2.0 API we can
# automatically lookup it, up however if there are more than one
# (e.g. new()), we need to use a fully qualified value here
# of course the same if the package is not a mod_perl one.
#
# the first field represents the replacement method or undef if none
# exists, the second field is for extra comments (e.g. when there is
# no replacement method)
my $methods_compat = {
    # Apache::
    gensym            => ['Symbol::gensym',
                          'or use "open my $fh, $file"'],
    module            => ['Apache::Module::loaded',
                          ''],
    define            => ['exists_config_define',
                          ''],
    httpd_conf        => ['add_config',
                          ''],
    SERVER_VERSION    => ['get_server_version',
                          ''],
    can_stack_handlers=> [undef,
                          'there is no more need for that method in mp2'],

    # Apache::RequestRec
    soft_timeout      => [undef,
                          'there is no more need for that method in mp2'],
    hard_timeout      => [undef,
                          'there is no more need for that method in mp2'],
    kill_timeout      => [undef,
                          'there is no more need for that method in mp2'],
    reset_timeout     => [undef,
                          'there is no more need for that method in mp2'],
    cleanup_for_exec  => [undef,
                          'there is no more need for that method in mp2'],
    send_http_header  => ['content_type',
                          ''],
    header_in         => ['headers_in',
                          'this method works in mod_perl 1.0 too'],
    header_out        => ['headers_out',
                          'this method works in mod_perl 1.0 too'],
    err_header_out    => ['err_headers_out',
                          'this method works in mod_perl 1.0 too'],
    register_cleanup  => ['cleanup_register',
                          ''],
    post_connection   => ['cleanup_register',
                          ''],
    content           => [undef, # XXX: Apache::Request::what?
                          'use CGI.pm or Apache::Request instead'],
    clear_rgy_endav   => ['special_list_clear',
                          ''],
    stash_rgy_endav   => [undef,
                          ''],
    run_rgy_endav     => ['special_list_call',
                          'this method is no longer needed'],
    seqno             => [undef,
                          'internal to mod_perl 1.0'],
    chdir_file        => [undef, # XXX: to be resolved
                          'temporary unavailable till the issue with chdir' .
                          ' in the threaded env is resolved'],
    log_reason        => ['log_error',
                          'not in the Apache 2.0 API'],
    READLINE          => [undef, # XXX: to be resolved
                          ''],
    send_fd_length    => [undef,
                          'not in the Apache 2.0 API'],
    send_fd           => ['sendfile',
                          'requires an offset argument'],
    is_main           => ['main',
                          'not in the Apache 2.0 API'],
    cgi_var           => ['subprocess_env',
                          'subprocess_env can be used with mod_perl 1.0'],
    cgi_env           => ['subprocess_env',
                          'subprocess_env can be used with mod_perl 1.0'],
    each_byterange    => [undef,
                          'now handled internally by ap_byterange_filter'],
    set_byterange     => [undef,
                          'now handled internally by ap_byterange_filter'],

    # Apache::File
    open              => [undef,
                          ''],
    close             => [undef, # XXX: also defined in APR::Socket
                          ''],
    tmpfile           => [undef,
                          'not in the Apache 2.0 API, ' .
                          'use File::Temp instead'],

    # Apache::Util
    size_string       => ['format_size',
                          ''],
    escape_uri        => ['unescape_path',
                          ''],
    unescape_uri      => ['unescape_url',
                          ''],
    unescape_url_info => [undef,
                          'use CGI::Util::unescape() instead'],
    escape_html       => [undef, # XXX: will be ap_escape_html
                          'ap_escape_html now requires a pool object'],
    parsedate         => ['parse_http',
                          ''],
    validate_password => ['password_validate',
                          ''],

    # Apache::Table
    #new               => ['make',
    #                      ''], # XXX: there are other 'new' methods

    # Apache::Connection
    auth_type         => ['ap_auth_type',
                          'now resides in the request object'],
};

sub avail_methods_compat {
    return keys %$methods_compat;
}

sub avail_methods {
    return keys %$methods;
}

sub avail_modules {
    my %modules = ();
    for my $method (keys %$methods) {
        for my $item ( @{ $methods->{$method} }) {
            $modules{$item->[MODULE]}++;
        }
    }
    return keys %modules;
}

sub preload_all_modules {
    _get_modules() unless $modules;
    eval "require $_" for keys %$modules;
}

sub _print_func {
    my $func = shift;
    my @args = @_ ? @_ : @ARGV;
    no strict 'refs';
    print( ($func->($_))[0]) for @args;
}

sub print_module { _print_func('lookup_module', @_) }
sub print_object { _print_func('lookup_object', @_) }

sub print_method {
    my @args = @_ ? @_ : @ARGV;
    while (@args) {
         my $method = shift @args;
         my $object = (@args && 
             (ref($args[0]) || $args[0] =~ /^(Apache|ModPerl|APR)/))
             ? shift @args
             : undef;
         print( (lookup_method($method, $object))[0]);
    }
}

sub sep { return '-' x (shift() + 20) . "\n" }

# what modules contain the passed method.
# an optional object or a reference to it can be passed to help
# resolve situations where there is more than one module containing
# the same method. Inheritance is supported.
sub lookup_method {
    my ($method, $object) = @_;

    unless (defined $method) {
        my $hint = "No 'method' argument was passed\n";
        return ($hint);
    }

    # strip the package name for the fully qualified method
    $method =~ s/.+:://;

    if (exists $methods_compat->{$method}) {
        my ($replacement, $comment) = @{$methods_compat->{$method}};
        my $hint = "'$method' is not a part of the mod_perl 2.0 API\n";
        $comment = length $comment ? " $comment\n" : "";

        # some removed methods have no replacement
        return $hint . "$comment" unless defined $replacement;

        $hint .= "use '$replacement' instead. $comment";

        # if fully qualified don't look up its container
        return $hint if $replacement =~ /::/;

        my ($modules_hint, @modules) = lookup_method($replacement, $object);
        return $hint . $modules_hint;
    }
    elsif (!exists $methods->{$method}) {
        my $hint = "Don't know anything about method '$method'\n";
        return ($hint);
    }

    my @items = @{ $methods->{$method} };
    if (@items == 1) {
        my $module = $items[0]->[MODULE];
        my $hint = "To use method '$method' add:\n" . "\tuse $module ();\n";
        # we should really check that the method matches the object if
        # any was passed, but it may not always work
        return ($hint, $module);
    }
    else {
        if (defined $object) {
            my $class = ref $object || $object;
            for my $item (@items) {
                # real class or inheritance
                if ($class eq $item->[OBJECT] or
                    (ref($object) && $object->isa($item->[OBJECT]))) {
                    my $module = $item->[MODULE];
                    my $hint = "To use method '$method' add:\n" .
                        "\tuse $module ();\n";
                    return ($hint, $module);
                }
            }
            # fall-through
            local $" = ", ";
            my @modules = map $_->[MODULE], @items;
            my $hint = "Several modules (@modules) contain method '$method' " .
                "but none of them matches class '$class';\n";
            return ($hint);

        }
        else {
            my %modules = map { $_->[MODULE] => 1 } @items;
            # remove dups if any (e.g. $s->add_input_filter and
            # $r->add_input_filter are loaded by the same Apache::Filter)
            my @modules = keys %modules;
            my $hint;
            if (@modules == 1) {
                $hint = "To use method '$method' add:\n\tuse $modules[0] ();\n";
                return ($hint, $modules[0]);
            }
            else {
                $hint = "There is more than one class with method '$method'\n" .
                    "try one of:\n" . join '', map {"\tuse $_ ();\n"} @modules;
                return ($hint, @modules);
            }
        }
    }
}

# what methods are contained in the passed module name
sub lookup_module {
    my ($module) = shift;

    unless (defined $module) {
        my $hint = "no 'module' argument was passed\n";
        return ($hint);
    }

    _get_modules() unless $modules;

    unless (exists $modules->{$module}) {
        my $hint = "don't know anything about module '$module'\n";
        return ($hint);
    }

    my @methods;
    my $max_len = 6;
    for ( @{ $modules->{$module} } ) {
        $max_len = length $_->[0] if length $_->[0] > $max_len;
        push @methods, $_->[0];
    }

    my $format = "%-${max_len}s %s\n";
    my $banner = sprintf($format, "Method", "Invoked on object type");
    my $hint = join '',
        ("\nModule '$module' contains the following XS methods:\n\n", 
         $banner,  sep(length($banner)),
         map( { sprintf $format, $_->[0], $_->[1]||'???'}
             @{ $modules->{$module} }),
         sep(length($banner)));

    return ($hint, @methods);
}

# what methods can be invoked on the passed object (or its reference)
sub lookup_object {
    my ($object) = shift;

    unless (defined $object) {
        my $hint = "no 'object' argument was passed\n";
        return ($hint);
    }

    _get_objects() unless $objects;

    # a real object was passed?
    $object = ref $object || $object;

    unless (exists $objects->{$object}) {
        my $hint = "don't know anything about objects of type '$object'\n";
        return ($hint);
    }

    my @methods;
    my $max_len = 6;
    for ( @{ $objects->{$object} } ) {
        $max_len = length $_->[0] if length $_->[0] > $max_len;
        push @methods, $_->[0];
    }

    my $format = "%-${max_len}s %s\n";
    my $banner = sprintf($format, "Method", "Module");
    my $hint = join '',
        ("\nObjects of type '$object' can invoke the following XS methods:\n\n",
         $banner, sep(length($banner)),
         map({ sprintf $format, $_->[0], $_->[1]} @{ $objects->{$object} }),
         sep(length($banner)));

    return ($hint, @methods);

}

1;

=head1 NAME

ModPerl::MethodLookup -- Lookup mod_perl modules, objects and methods

=head1 Synopsis

  use ModPerl::MethodLookup;
  
  # return all module names containing XS method 'print'
  my($hint, @modules) =
      ModPerl::MethodLookup::lookup_method('print');
  
  # return only module names containing method 'print' which
  # expects the first argument to be of type 'Apache::Filter'
  # (here $filter is an Apache::Filter object)
  my($hint, @modules) =
      ModPerl::MethodLookup::lookup_method('print', $filter);
  # or
  my($hint, @modules) =
      ModPerl::MethodLookup::lookup_method('print', 'Apache::Filter');
  
  # what XS methods defined by module 'Apache::Filter'
  my($hint, @methods) =
      ModPerl::MethodLookup::lookup_module('Apache::Filter');
  
  # what XS methods can be invoked on the object $r (or a ref)
  my($hint, @methods) =
      ModPerl::MethodLookup::lookup_object($r);
  # or
  my($hint, @methods) =
      ModPerl::MethodLookup::lookup_object('Apache::RequestRec');
  
  # preload all mp2 modules in startup.pl
  ModPerl::MethodLookup::preload_all_modules();
  
  # command line shortcuts
  % perl -MApache2 -MModPerl::MethodLookup -e print_module \
    Apache::RequestRec Apache::Filter
  % perl -MApache2 -MModPerl::MethodLookup -e print_object Apache
  % perl -MApache2 -MModPerl::MethodLookup -e print_method \
    get_server_built request
  % perl -MApache2 -MModPerl::MethodLookup -e print_method read
  % perl -MApache2 -MModPerl::MethodLookup -e print_method read APR::Bucket




=head1 Description

mod_perl 2.0 provides many methods, which reside in various
modules. One has to load each of the modules before using the desired
methods. C<ModPerl::MethodLookup> provides the Perl API for finding
module names which contain methods in question and other helper
functions, to find out out what methods defined by some module, what
methods can be called on a given object, etc.




=head1 API




=head2 C<lookup_method()>

Find modules (packages) containing a certain method

  ($hint, @modules) = lookup_method($method_name);
  ($hint, @modules) = lookup_method($method_name, $object);
  ($hint, @modules) = lookup_method($method_name, $class));

=over 4

=item arg1: C<$method_name> ( string )

the method name to look up

=item opt arg2: C<$object> or C<$class>

a blessed object or the name of the class it's blessed into. If there
is more than one match, this extra information is used to return only
modules containing methods operating on the objects of the same kind.

If a sub-classed object is passed it'll be handled correctly, by
checking its super-class(es).  This usage is useful when the
C<L<AUTOLOAD|/C_AUTOLOAD_>> is used to find a not yet loaded module
which include the called method.

=item ret1: C<$hint>

a string containing a human readable lookup result, suggesting which
modules should be loaded, ready for copy-n-paste or explaining the
failure if the lookup didn't succeed.

=item ret2: C<@modules>

an array of modules which have matched the query, i.e. the names of
the modules which contain the requested method.

=item since: 1.99_12

=back

Examples:

Return all module names containing XS method I<print>:

  my($hint, @modules) =
      ModPerl::MethodLookup::lookup_method('print');

Return only module names containing method I<print> which expects the
first argument to be of type C<Apache::Filter>:

  my $filter = bless {}, 'Apache::Filter';
  my($hint, @modules) =
      ModPerl::MethodLookup::lookup_method('print', $filter);

or:

  my($hint, @modules) =
      ModPerl::MethodLookup::lookup_method('print', 'Apache::Filter');








=head2 C<lookup_module()>

Find methods contained in a certain module (package)

  ($hint, @methods) = lookup_module($module_name);

=over 4

=item arg1: C<$module_name> ( string )

the module name

=item ret1: C<$hint>

a string containing a human readable lookup result, suggesting, which
methods the module C<$module_name> implements, or explaining the
failure if the lookup failed.

=item ret2: C<@methods>

an array of methods which have matched the query, i.e. the names of
the methods defined in the requested module.

=item since: 1.99_12

=back

Example:

What XS methods defined by module C<Apache::Filter>:

  my($hint, @methods) =
      ModPerl::MethodLookup::lookup_module('Apache::Filter');







=head2 C<lookup_object()>

  ($hint, @methods) = lookup_object($object);
  ($hint, @methods) = lookup_object($class);

=over 4

=item arg1: C<$object> or C<$class>

an object or a name of a class an object is blessed into

If a sub-classed object is passed it'll be handled correctly, by
including methods provided by its super-class(es).

=item ret1: C<$hint>

a string containing a human readable lookup result, suggesting, which
methods the given object can invoke (including module names that need
to be loaded to use those methods), or explaining the failure if the
lookup failed.

=item ret2: C<@methods>

an array of methods which have matched the query, i.e. the names of
the methods that can be invoked on the given object (or its class
name).

=item since: 1.99_12

=back

META: As of this writing this function may miss some of the
functions/methods that can be invoked on the given object. Currently
we can't programmatically deduct the objects they are invoked on,
because these methods are written in pure XS and manipulate the
arguments stack themselves. Currently these are mainly XS functions,
not methods, which of course aren't invoked on objects. There are also
logging function wrappers (C<Apache::Log>).

Examples:

What XS methods can be invoked on the object C<$r>:

  my($hint, @methods) =
      ModPerl::MethodLookup::lookup_object($r);

or C<$r>'s class -- C<Apache::RequestRec>:

  my($hint, @methods) =
      ModPerl::MethodLookup::lookup_object('Apache::RequestRec');





=head2 C<preload_all_modules()>

The function C<preload_all_modules()> preloads all mod_perl 2.0
modules, which implement their API in XS. This is similar to the
mod_perl 1.0 behavior which has most of its methods loaded at the
startup.

CPAN modules developers should make sure their distribution loads each
of the used mod_perl 2.0 modules explicitly, and not use this
function, as it takes the fine control away from the users. One should
avoid doing this the production server (unless all modules are used
indeed) in order to save memory.

=over

=item since: 1.99_12

=back







=head2 C<print_method()>

C<print_method()> is a convenience wrapper for
C<L<lookup_method()|/C_lookup_method___>>, mainly designed to be used
from the command line. For example to print all the modules which
define method I<read> execute:

  % perl -MApache2 -MModPerl::MethodLookup -e print_method read

Since this will return more than one module, we can narrow the query
to only those methods which expect the first argument to be blessed
into class C<APR::Bucket>:

  % perl -MApache2 -MModPerl::MethodLookup -e print_method read APR::Bucket

You can pass more than one method and it'll perform a lookup on each
of the methods. For example to lookup methods C<get_server_built> and
C<request> you can do:

  % perl -MApache2 -MModPerl::MethodLookup -e print_method \
    get_server_built request

The function C<print_method()> is exported by default.

=over

=item since: 1.99_12

=back




=head2 C<print_module()>

C<print_module()> is a convenience wrapper for
C<L<lookup_module()|/C_lookup_module___>>, mainly designed to be used
from the command line. For example to print all the methods defined in
the module C<Apache::RequestRec>, followed by methods defined in the
module C<Apache::Filter> you can run:

  % perl -MApache2 -MModPerl::MethodLookup -e print_module \
    Apache::RequestRec Apache::Filter

The function C<print_module()> is exported by default.

=over

=item since: 1.99_12

=back





=head2 C<print_object()>

C<print_object()> is a convenience wrapper for
C<L<lookup_object()|/C_lookup_object___>>, mainly designed to be used
from the command line. For example to print all the methods that can
be invoked on object blessed into a class C<Apache::RequestRec> run:

  % perl -MApache2 -MModPerl::MethodLookup -e print_object \
    Apache::RequestRec

Similar to C<L<print_object()|/C_print_object___>>, more than one
class can be passed to this function.

The function C<print_object()> is exported by default.

=over

=item since: 1.99_12

=back







=head1 Applications





=head2 C<AUTOLOAD>

When Perl fails to locate a method it checks whether the package the
object belongs to has an C<AUTOLOAD> function defined and if so, calls
it with the same arguments as the missing method while setting a
global variable C<$AUTOLOAD> (in that package) to the name of the
originally called method. We can use this facility to lookup the
modules to be loaded when such a failure occurs. Though since we have
many packages to take care of we will use a special
C<UNIVERSAL::AUTOLOAD> function which Perl calls if can't find the
C<AUTOLOAD> function in the given package.

In that function you can query C<ModPerl::MethodLookup>, require() the
module that includes the called method and call that method again
using the goto() trick:

  use ModPerl::MethodLookup;
  sub UNIVERSAL::AUTOLOAD {
      my($hint, @modules) =
          ModPerl::MethodLookup::lookup_method($UNIVERSAL::AUTOLOAD, @_);
      if (@modules) {
          eval "require $_" for @modules;
          goto &$UNIVERSAL::AUTOLOAD;
      }
      else {
          die $hint;
      }
  }

However we don't endorse this approach. It's a better approach to
always abort the execution which printing the C<$hint>and use fix the
code to load the missing module. Moreover installing
C<UNIVERSAL::AUTOLOAD> may cause a lot of problems, since once it's
installed Perl will call it every time some method is missing
(e.g. undefined C<DESTROY> methods). The following approach seems to
somewhat work for me. It installs C<UNIVERSAL::AUTOLOAD> only when the
the child process starts.

  httpd.conf:
  -----------
  PerlChildInitHandler ModPerl::MethodLookupAuto

  startup.pl:
  -----------
  {
      package ModPerl::MethodLookupAuto;
      use ModPerl::MethodLookup;
    
      use Carp;
      sub handler {
    
          *UNIVERSAL::AUTOLOAD = sub {
              my $method = $AUTOLOAD;
              return if $method =~ /DESTROY/; # exclude DESTROY resolving
    
              my ($hint, @modules) =
                  ModPerl::MethodLookup::lookup_method($method, @_);
              $hint ||= "Can't find method $AUTOLOAD";
              croak $hint;
          };
          return 0;
      }
  }

This example doesn't load the modules for you. It'll print to STDERR
what module should be loaded, when a method from the not-yet-loaded
module is called.

A similar technique is used by
C<L<Apache::porting|docs::2.0::api::Apache::porting>>.


META: there is a better version of AUTOLOAD discussed on the dev
list. Replace the current one with it. (search the archive for
EazyLife)





=head2 Command Line Lookups

When a method is used and mod_perl has reported a failure to find it,
it's often useful to use the command line query to figure out which
module needs to be loaded. For example if when executing:

  $r->construct_url();

mod_perl complains:

  Can't locate object method "construct_url" via package
  "Apache::RequestRec" at ...

you can ask C<ModPerl::MethodLookup> for help:

  % perl -MApache2 -MModPerl::MethodLookup -e print_method construct_url
  To use method 'construct_url' add:
          use Apache::URI ();

and after copy-n-pasting the use statement in our code, the problem
goes away.

One can create a handy alias for this technique. For example, C-style
shell users can do:

   % alias lookup "perl -MApache2 -MModPerl::MethodLookup -e print_method"

For Bash-style shell users:

   % alias lookup="perl -MApache2 -MModPerl::MethodLookup -e print_method"

Now the lookup is even easier:

  % lookup construct_url
  to use method 'construct_url' add:
          use Apache::URI;

Similar aliases can be provided for
C<L<print_object()|/C_print_object___>> and
C<L<print_module()|/C_print_module___>>.





=head1 Todo

These methods aren't yet picked by this module (the extract from the
map file):

 modperl_filter_attributes     | MODIFY_CODE_ATTRIBUTES
 modperl_spawn_proc_prog       | spawn_proc_prog
 apr_ipsubnet_create           | new

Please report to L<the mod_perl development mailing
list|maillist::dev> if you find any other missing methods. But remember that
as of this moment the module reports only XS functions. In the future
we may add support for pure perl functions/methods as well.








=head1 See Also

=over

=item *

L<the mod_perl 1.0 backward compatibility
document|docs::2.0::user::porting::compat/>

=item *

L<porting Perl modules|docs::2.0::user::porting::porting>

=item *

L<porting XS modules|docs::2.0::devel::porting::porting>

=item *

C<L<Apache::porting|docs::2.0::api::Apache::porting>>

=back





=head1 Copyright

mod_perl 2.0 and its core modules are copyrighted under
The Apache Software License, Version 2.0.




=head1 Authors

L<The mod_perl development team and numerous
contributors|about::contributors::people>.

=cut
