|
my $methods = {
'BINMODE' => [
[
'Apache2::RequestIO' ,
'Apache2::RequestRec'
]
],
'CLEAR' => [
[
'APR::Table' ,
'APR::Table'
]
],
'CLOSE' => [
[
'Apache2::RequestIO' ,
'Apache2::RequestRec'
]
],
'DELETE' => [
[
'APR::Table' ,
'APR::Table'
]
],
'DESTROY' => [
[
'APR::Pool' ,
'APR::Pool'
],
[
'APR::ThreadMutex' ,
'APR::ThreadMutex'
],
[
'APR::ThreadRWLock' ,
'APR::ThreadRWLock'
],
[
'Apache2::SubRequest' ,
'Apache2::SubRequest'
]
],
'EXISTS' => [
[
'APR::Table' ,
'APR::Table'
]
],
'FETCH' => [
[
'APR::Table' ,
'APR::Table'
]
],
'FILENO' => [
[
'Apache2::RequestIO' ,
'Apache2::RequestRec'
]
],
'FIRSTKEY' => [
[
'APR::Table' ,
'APR::Table'
]
],
'GETC' => [
[
'Apache2::RequestIO' ,
'Apache2::RequestRec'
]
],
'LOG_MARK' => [
[
'Apache2::Log' ,
undef
]
],
'MODIFY_CODE_ATTRIBUTES' => [
[
'Apache2::Filter' ,
undef
]
],
'NEXTKEY' => [
[
'APR::Table' ,
'APR::Table'
]
],
'OPEN' => [
[
'Apache2::RequestIO' ,
'Apache2::RequestRec'
]
],
'PRINT' => [
[
'Apache2::Filter' ,
'Apache2::Filter'
],
[
'Apache2::RequestIO' ,
'Apache2::RequestRec'
]
],
'PRINTF' => [
[
'Apache2::RequestIO' ,
'Apache2::RequestRec'
]
],
'READ' => [
[
'Apache2::RequestIO' ,
'Apache2::RequestRec'
]
],
'STORE' => [
[
'APR::Table' ,
'APR::Table'
]
],
'TIEHANDLE' => [
[
'Apache2::Filter' ,
'Apache2::Filter'
],
[
'Apache2::RequestIO' ,
'Apache2::RequestRec'
]
],
'UNTIE' => [
[
'Apache2::RequestIO' ,
'Apache2::RequestRec'
]
],
'WRITE' => [
[
'Apache2::RequestIO' ,
'Apache2::RequestRec'
]
],
'aborted' => [
[
'Apache2::Connection' ,
'Apache2::Connection'
]
],
'add' => [
[
'APR::Table' ,
'APR::Table'
],
[
'Apache2::Module' ,
'Apache2::Module'
]
],
'add_config' => [
[
'Apache2::CmdParms' ,
'Apache2::CmdParms'
],
[
'Apache2::RequestUtil' ,
'Apache2::RequestRec'
],
[
'Apache2::ServerUtil' ,
'Apache2::ServerRec'
]
],
'add_input_filter' => [
[
'Apache2::Filter' ,
'Apache2::Connection'
],
[
'Apache2::Filter' ,
'Apache2::RequestRec'
]
],
'add_output_filter' => [
[
'Apache2::Filter' ,
'Apache2::Connection'
],
[
'Apache2::Filter' ,
'Apache2::RequestRec'
]
],
'add_version_component' => [
[
'Apache2::ServerUtil' ,
'Apache2::ServerRec'
]
],
'addrs' => [
[
'Apache2::ServerRec' ,
'Apache2::ServerRec'
]
],
'alert' => [
[
'Apache2::Log' ,
undef
]
],
'allow_methods' => [
[
'Apache2::Access' ,
'Apache2::RequestRec'
]
],
'allow_options' => [
[
'Apache2::Access' ,
'Apache2::RequestRec'
]
],
'allow_override_opts' => [
[
'Apache2::Access' ,
'Apache2::RequestRec'
]
],
'allow_overrides' => [
[
'Apache2::Access' ,
'Apache2::RequestRec'
]
],
'allowed' => [
[
'Apache2::RequestRec' ,
'Apache2::RequestRec'
]
],
'allowed_methods' => [
[
'Apache2::RequestRec' ,
'Apache2::RequestRec'
]
],
'allowed_xmethods' => [
[
'Apache2::RequestRec' ,
'Apache2::RequestRec'
]
],
'ap_api_major_version' => [
[
'Apache2::Module' ,
'Apache2::Module'
]
],
'ap_api_minor_version' => [
[
'Apache2::Module' ,
'Apache2::Module'
]
],
'ap_auth_type' => [
[
'Apache2::RequestRec' ,
'Apache2::RequestRec'
]
],
'args' => [
[
'Apache2::Directive' ,
'Apache2::Directive'
],
[
'Apache2::RequestRec' ,
'Apache2::RequestRec'
]
],
'args_how' => [
[
'Apache2::Command' ,
'Apache2::Command'
]
],
'as_hash' => [
[
'Apache2::Directive' ,
'Apache2::Directive'
]
],
'as_string' => [
[
'Apache2::Directive' ,
'Apache2::Directive'
],
[
'Apache2::RequestUtil' ,
'Apache2::RequestRec'
]
],
'assbackwards' => [
[
'Apache2::RequestRec' ,
'Apache2::RequestRec'
]
],
'atime' => [
[
'APR::Finfo' ,
'APR::Finfo'
]
],
'auth_name' => [
[
'Apache2::Access' ,
'Apache2::RequestRec'
]
],
'auth_type' => [
[
'Apache2::Access' ,
'Apache2::RequestRec'
]
],
'base_server' => [
[
'Apache2::Connection' ,
'Apache2::Connection'
]
],
'bind' => [
[
'APR::Socket' ,
'APR::Socket'
]
],
'bucket_alloc' => [
[
'APR::Brigade' ,
'APR::Brigade'
],
[
'Apache2::Connection' ,
'Apache2::Connection'
]
],
'bytes_sent' => [
[
'Apache2::RequestRec' ,
'Apache2::RequestRec'
]
],
'c' => [
[
'Apache2::Filter' ,
'Apache2::Filter'
]
],
'cfg' => [
[
'ModPerl::TiPool' ,
'ModPerl::TiPool'
]
],
'check_cmd_context' => [
[
'Apache2::CmdParms' ,
'Apache2::CmdParms'
]
],
'child_terminate' => [
[
'Apache2::RequestUtil' ,
'Apache2::RequestRec'
]
],
'cleanup' => [
[
'APR::Brigade' ,
'APR::Brigade'
]
],
'cleanup_for_exec' => [
[
'APR::Pool' ,
'APR::Pool'
]
],
'cleanup_register' => [
[
'APR::Pool' ,
'APR::Pool'
]
],
'clear' => [
[
'APR::Pool' ,
'APR::Pool'
],
[
'APR::Table' ,
'APR::Table'
]
],
'client_addr' => [
[
'Apache2::Connection' ,
'Apache2::Connection'
]
],
'client_ip' => [
[
'Apache2::Connection' ,
'Apache2::Connection'
]
],
'client_socket' => [
[
'Apache2::Connection' ,
'Apache2::Connection'
]
],
'close' => [
[
'APR::Socket' ,
'APR::Socket'
]
],
'cmd' => [
[
'Apache2::CmdParms' ,
'Apache2::CmdParms'
]
],
'cmds' => [
[
'Apache2::Module' ,
'Apache2::Module'
]
],
'compress' => [
[
'APR::Table' ,
'APR::Table'
]
],
'concat' => [
[
'APR::Brigade' ,
'APR::Brigade'
]
],
'conftree' => [
[
'Apache2::Directive' ,
'Apache2::Directive'
]
],
'conn_config' => [
[
'Apache2::Connection' ,
'Apache2::Connection'
]
],
'connect' => [
[
'APR::Socket' ,
'APR::Socket'
]
],
'connection' => [
[
'Apache2::RequestRec' ,
'Apache2::RequestRec'
]
],
'construct_server' => [
[
'Apache2::URI' ,
'Apache2::RequestRec'
]
],
'construct_url' => [
[
'Apache2::URI' ,
'Apache2::RequestRec'
]
],
'content_encoding' => [
[
'Apache2::RequestRec' ,
'Apache2::RequestRec'
]
],
'content_languages' => [
[
'Apache2::RequestRec' ,
'Apache2::RequestRec'
]
],
'content_type' => [
[
'Apache2::RequestRec' ,
'Apache2::RequestRec'
]
],
'context' => [
[
'Apache2::CmdParms' ,
'Apache2::CmdParms'
],
[
'Apache2::ServerRec' ,
'Apache2::ServerRec'
]
],
'copy' => [
[
'APR::Table' ,
'APR::Table'
]
],
'crit' => [
[
'Apache2::Log' ,
undef
]
],
'csize' => [
[
'APR::Finfo' ,
'APR::Finfo'
]
],
'ctime' => [
[
'APR::Finfo' ,
'APR::Finfo'
]
],
'ctx' => [
[
'Apache2::Filter' ,
'Apache2::Filter'
]
],
'current' => [
[
'ModPerl::Interpreter' ,
'ModPerl::Interpreter'
]
],
'current_callback' => [
[
'ModPerl::Util' ,
'ModPerl::Util'
]
],
'current_perl_id' => [
[
'ModPerl::Util' ,
'ModPerl::Util'
]
],
'current_thread_id' => [
[
'APR::OS' ,
'APR::OS'
]
],
'custom_response' => [
[
'Apache2::Response' ,
'Apache2::RequestRec'
]
],
'data' => [
[
'APR::Bucket' ,
'APR::Bucket'
]
],
'debug' => [
[
'Apache2::Log' ,
undef
]
],
'decode' => [
[
'APR::Base64' ,
undef
]
],
'delete' => [
[
'APR::Bucket' ,
'APR::Bucket'
]
],
'destroy' => [
[
'APR::Brigade' ,
'APR::Brigade'
],
[
'APR::Bucket' ,
'APR::Bucket'
],
[
'APR::BucketAlloc' ,
'APR::BucketAlloc'
],
[
'APR::Pool' ,
'APR::Pool'
]
],
'device' => [
[
'APR::Finfo' ,
'APR::Finfo'
]
],
'die' => [
[
'Apache2::HookRun' ,
'Apache2::RequestRec'
]
],
'dir_config' => [
[
'Apache2::RequestUtil' ,
'Apache2::RequestRec'
],
[
'Apache2::ServerUtil' ,
'Apache2::ServerRec'
]
],
'directive' => [
[
'Apache2::CmdParms' ,
'Apache2::CmdParms'
],
[
'Apache2::Directive' ,
'Apache2::Directive'
]
],
'discard_request_body' => [
[
'Apache2::RequestIO' ,
'Apache2::RequestRec'
]
],
'do' => [
[
'APR::Table' ,
'APR::Table'
]
],
'document_root' => [
[
'Apache2::RequestUtil' ,
'Apache2::RequestRec'
]
],
'emerg' => [
[
'Apache2::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' => [
[
'Apache2::RequestRec' ,
'Apache2::RequestRec'
]
],
'errmsg' => [
[
'Apache2::Command' ,
'Apache2::Command'
]
],
'error' => [
[
'Apache2::Log' ,
undef
]
],
'error_fname' => [
[
'Apache2::ServerRec' ,
'Apache2::ServerRec'
]
],
'error_log2stderr' => [
[
'Apache2::ServerUtil' ,
'Apache2::ServerRec'
]
],
'escape_path' => [
[
'Apache2::Util' ,
'Apache2::Util'
]
],
'exists_config_define' => [
[
'Apache2::ServerUtil' ,
'Apache2::ServerUtil'
]
],
'fflush' => [
[
'Apache2::Filter' ,
'Apache2::Filter'
]
],
'filename' => [
[
'Apache2::Directive' ,
'Apache2::Directive'
],
[
'Apache2::RequestRec' ,
'Apache2::RequestRec'
]
],
'filepath_name_get' => [
[
'APR::Util' ,
'APR::Util'
]
],
'filetype' => [
[
'APR::Finfo' ,
'APR::Finfo'
]
],
'filter_flush' => [
[
'Apache2::Filter' ,
'APR::Brigade'
]
],
'find_linked_module' => [
[
'Apache2::Module' ,
'Apache2::Module'
]
],
'finfo' => [
[
'Apache2::RequestRec' ,
'Apache2::RequestRec'
]
],
'first' => [
[
'APR::Brigade' ,
'APR::Brigade'
]
],
'first_child' => [
[
'Apache2::Directive' ,
'Apache2::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' => [
[
'Apache2::Filter' ,
'Apache2::Filter'
]
],
'get' => [
[
'APR::Table' ,
undef
]
],
'get_basic_auth_pw' => [
[
'Apache2::Access' ,
undef
]
],
'get_brigade' => [
[
'Apache2::Filter' ,
'Apache2::Filter'
]
],
'get_client_block' => [
[
'Apache2::RequestIO' ,
'Apache2::RequestRec'
]
],
'get_config' => [
[
'Apache2::Module' ,
'Apache2::Module'
]
],
'get_handlers' => [
[
'Apache2::RequestUtil' ,
'Apache2::RequestRec'
],
[
'Apache2::ServerUtil' ,
'Apache2::ServerRec'
]
],
'get_limit_req_body' => [
[
'Apache2::RequestUtil' ,
'Apache2::RequestRec'
]
],
'get_remote_host' => [
[
'Apache2::Connection' ,
'Apache2::Connection'
]
],
'get_remote_logname' => [
[
'Apache2::Access' ,
'Apache2::RequestRec'
]
],
'get_server_banner' => [
[
'Apache2::ServerUtil' ,
'Apache2::ServerUtil'
]
],
'get_server_description' => [
[
'Apache2::ServerUtil' ,
'Apache2::ServerUtil'
]
],
'get_server_name' => [
[
'Apache2::RequestUtil' ,
'Apache2::RequestRec'
]
],
'get_server_port' => [
[
'Apache2::RequestUtil' ,
'Apache2::RequestRec'
]
],
'get_server_version' => [
[
'Apache2::ServerUtil' ,
'Apache2::ServerUtil'
]
],
'get_status_line' => [
[
'Apache2::RequestUtil' ,
'Apache2::RequestUtil'
]
],
'group' => [
[
'APR::Finfo' ,
'APR::Finfo'
]
],
'group_id' => [
[
'Apache2::ServerUtil' ,
'Apache2::ServerUtil'
]
],
'handler' => [
[
'Apache2::RequestRec' ,
'Apache2::RequestRec'
]
],
'header_only' => [
[
'Apache2::RequestRec' ,
'Apache2::RequestRec'
]
],
'headers_in' => [
[
'Apache2::RequestRec' ,
'Apache2::RequestRec'
]
],
'headers_out' => [
[
'Apache2::RequestRec' ,
'Apache2::RequestRec'
]
],
'hostinfo' => [
[
'APR::URI' ,
'APR::URI'
]
],
'hostname' => [
[
'APR::URI' ,
'APR::URI'
],
[
'Apache2::RequestRec' ,
'Apache2::RequestRec'
]
],
'ht_time' => [
[
'Apache2::Util' ,
'Apache2::Util'
]
],
'id' => [
[
'Apache2::Connection' ,
'Apache2::Connection'
]
],
'in_use' => [
[
'ModPerl::TiPool' ,
'ModPerl::TiPool'
]
],
'info' => [
[
'Apache2::CmdParms' ,
'Apache2::CmdParms'
],
[
'Apache2::Log' ,
undef
]
],
'inode' => [
[
'APR::Finfo' ,
'APR::Finfo'
]
],
'input_filters' => [
[
'Apache2::Connection' ,
'Apache2::Connection'
],
[
'Apache2::RequestRec' ,
'Apache2::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' => [
[
'Apache2::SubRequest' ,
'Apache2::RequestRec'
]
],
'internal_redirect' => [
[
'Apache2::SubRequest' ,
'Apache2::RequestRec'
]
],
'internal_redirect_handler' => [
[
'Apache2::SubRequest' ,
'Apache2::RequestRec'
]
],
'invoke_handler' => [
[
'Apache2::HookRun' ,
'Apache2::RequestRec'
]
],
'ip_get' => [
[
'APR::SockAddr' ,
'APR::SockAddr'
]
],
'is_EACCES' => [
[
'APR::Status' ,
'APR::Status'
]
],
'is_EAGAIN' => [
[
'APR::Status' ,
'APR::Status'
]
],
'is_ECONNABORTED' => [
[
'APR::Status' ,
'APR::Status'
]
],
'is_ECONNRESET' => [
[
'APR::Status' ,
'APR::Status'
]
],
'is_ENOENT' => [
[
'APR::Status' ,
'APR::Status'
]
],
'is_EOF' => [
[
'APR::Status' ,
'APR::Status'
]
],
'is_TIMEUP' => [
[
'APR::Status' ,
'APR::Status'
]
],
'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' => [
[
'Apache2::RequestUtil' ,
'Apache2::RequestRec'
]
],
'is_perl_option_enabled' => [
[
'Apache2::RequestUtil' ,
'Apache2::RequestRec'
],
[
'Apache2::ServerUtil' ,
'Apache2::ServerRec'
]
],
'is_virtual' => [
[
'Apache2::ServerRec' ,
'Apache2::ServerRec'
]
],
'keep_alive' => [
[
'Apache2::ServerRec' ,
'Apache2::ServerRec'
]
],
'keep_alive_max' => [
[
'Apache2::ServerRec' ,
'Apache2::ServerRec'
]
],
'keep_alive_timeout' => [
[
'Apache2::ServerRec' ,
'Apache2::ServerRec'
]
],
'keepalive' => [
[
'Apache2::Connection' ,
'Apache2::Connection'
]
],
'keepalives' => [
[
'Apache2::Connection' ,
'Apache2::Connection'
]
],
'last' => [
[
'APR::Brigade' ,
'APR::Brigade'
]
],
'length' => [
[
'APR::Brigade' ,
'APR::Brigade'
],
[
'APR::Bucket' ,
'APR::Bucket'
]
],
'limit_req_fields' => [
[
'Apache2::ServerRec' ,
'Apache2::ServerRec'
]
],
'limit_req_fieldsize' => [
[
'Apache2::ServerRec' ,
'Apache2::ServerRec'
]
],
'limit_req_line' => [
[
'Apache2::ServerRec' ,
'Apache2::ServerRec'
]
],
'line_num' => [
[
'Apache2::Directive' ,
'Apache2::Directive'
]
],
'listen' => [
[
'APR::Socket' ,
'APR::Socket'
]
],
'loaded' => [
[
'Apache2::Module' ,
'Apache2::Module'
]
],
'local_addr' => [
[
'Apache2::Connection' ,
'Apache2::Connection'
]
],
'local_host' => [
[
'Apache2::Connection' ,
'Apache2::Connection'
]
],
'local_ip' => [
[
'Apache2::Connection' ,
'Apache2::Connection'
]
],
'location' => [
[
'Apache2::RequestUtil' ,
'Apache2::RequestRec'
]
],
'location_merge' => [
[
'Apache2::RequestUtil' ,
'Apache2::RequestRec'
]
],
'lock' => [
[
'APR::ThreadMutex' ,
'APR::ThreadMutex'
]
],
'log' => [
[
'Apache2::Log' ,
'Apache2::RequestRec'
],
[
'Apache2::Log' ,
'Apache2::ServerRec'
]
],
'log_error' => [
[
'Apache2::Log' ,
undef
],
[
'Apache2::Log' ,
undef
]
],
'log_id' => [
[
'Apache2::Connection' ,
'Apache2::Connection'
]
],
'log_pid' => [
[
'Apache2::Log' ,
'Apache2::Log'
]
],
'log_reason' => [
[
'Apache2::Log' ,
'Apache2::RequestRec'
]
],
'log_rerror' => [
[
'Apache2::Log' ,
undef
]
],
'log_serror' => [
[
'Apache2::Log' ,
undef
]
],
'loglevel' => [
[
'Apache2::ServerUtil' ,
'Apache2::ServerRec'
]
],
'lookup' => [
[
'Apache2::Directive' ,
undef
]
],
'lookup_defaults' => [
[
'Apache2::ServerRec' ,
'Apache2::ServerRec'
]
],
'lookup_dirent' => [
[
'Apache2::SubRequest' ,
'Apache2::RequestRec'
]
],
'lookup_file' => [
[
'Apache2::SubRequest' ,
'Apache2::RequestRec'
]
],
'lookup_method_uri' => [
[
'Apache2::SubRequest' ,
'Apache2::RequestRec'
]
],
'lookup_uri' => [
[
'Apache2::SubRequest' ,
'Apache2::RequestRec'
]
],
'main' => [
[
'Apache2::RequestRec' ,
'Apache2::RequestRec'
]
],
'make' => [
[
'APR::Table' ,
'APR::Table'
]
],
'make_etag' => [
[
'Apache2::Response' ,
'Apache2::RequestRec'
]
],
'max' => [
[
'ModPerl::TiPoolConfig' ,
'ModPerl::TiPoolConfig'
]
],
'max_requests' => [
[
'ModPerl::TiPoolConfig' ,
'ModPerl::TiPoolConfig'
]
],
'max_spare' => [
[
'ModPerl::TiPoolConfig' ,
'ModPerl::TiPoolConfig'
]
],
'meets_conditions' => [
[
'Apache2::Response' ,
'Apache2::RequestRec'
]
],
'merge' => [
[
'APR::Table' ,
'APR::Table'
]
],
'method' => [
[
'Apache2::RequestRec' ,
'Apache2::RequestRec'
]
],
'method_is_limited' => [
[
'Apache2::CmdParms' ,
'Apache2::CmdParms'
]
],
'method_number' => [
[
'Apache2::RequestRec' ,
'Apache2::RequestRec'
]
],
'method_register' => [
[
'Apache2::ServerUtil' ,
'Apache2::ServerRec'
]
],
'min_spare' => [
[
'ModPerl::TiPoolConfig' ,
'ModPerl::TiPoolConfig'
]
],
'mip' => [
[
'ModPerl::Interpreter' ,
'ModPerl::Interpreter'
]
],
'module_config' => [
[
'Apache2::ServerRec' ,
'Apache2::ServerRec'
]
],
'module_index' => [
[
'Apache2::Module' ,
'Apache2::Module'
]
],
'mtime' => [
[
'APR::Finfo' ,
'APR::Finfo'
],
[
'Apache2::RequestRec' ,
'Apache2::RequestRec'
]
],
'name' => [
[
'APR::BucketType' ,
'APR::BucketType'
],
[
'APR::Finfo' ,
'APR::Finfo'
],
[
'Apache2::Command' ,
'Apache2::Command'
],
[
'Apache2::FilterRec' ,
'Apache2::FilterRec'
],
[
'Apache2::Module' ,
'Apache2::Module'
]
],
'names' => [
[
'Apache2::ServerRec' ,
'Apache2::ServerRec'
]
],
'new' => [
[
'APR::Brigade' ,
'APR::Brigade'
],
[
'APR::Bucket' ,
'APR::Bucket'
],
[
'APR::BucketAlloc' ,
'APR::BucketAlloc'
],
[
'APR::IpSubnet' ,
'APR::IpSubnet'
],
[
'APR::Pool' ,
'APR::Pool'
],
[
'APR::ThreadMutex' ,
'APR::ThreadMutex'
],
[
'APR::ThreadRWLock' ,
'APR::ThreadRWLock'
],
[
'APR::UUID' ,
'APR::UUID'
],
[
'Apache2::RequestUtil' ,
'Apache2::RequestRec'
]
],
'next' => [
[
'APR::Brigade' ,
'APR::Brigade'
],
[
'Apache2::Command' ,
'Apache2::Command'
],
[
'Apache2::Directive' ,
'Apache2::Directive'
],
[
'Apache2::Filter' ,
'Apache2::Filter'
],
[
'Apache2::Module' ,
'Apache2::Module'
],
[
'Apache2::RequestRec' ,
'Apache2::RequestRec'
],
[
'Apache2::ServerRec' ,
'Apache2::ServerRec'
]
],
'nlink' => [
[
'APR::Finfo' ,
'APR::Finfo'
]
],
'no_cache' => [
[
'Apache2::RequestUtil' ,
'Apache2::RequestRec'
]
],
'no_local_copy' => [
[
'Apache2::RequestRec' ,
'Apache2::RequestRec'
]
],
'note_auth_failure' => [
[
'Apache2::Access' ,
'Apache2::RequestRec'
]
],
'note_basic_auth_failure' => [
[
'Apache2::Access' ,
'Apache2::RequestRec'
]
],
'note_digest_auth_failure' => [
[
'Apache2::Access' ,
'Apache2::RequestRec'
]
],
'notes' => [
[
'Apache2::Connection' ,
'Apache2::Connection'
],
[
'Apache2::RequestRec' ,
'Apache2::RequestRec'
]
],
'notice' => [
[
'Apache2::Log' ,
undef
]
],
'num_requests' => [
[
'ModPerl::Interpreter' ,
'ModPerl::Interpreter'
]
],
'opt_get' => [
[
'APR::Socket' ,
'APR::Socket'
]
],
'opt_set' => [
[
'APR::Socket' ,
'APR::Socket'
]
],
'output_filters' => [
[
'Apache2::Connection' ,
'Apache2::Connection'
],
[
'Apache2::RequestRec' ,
'Apache2::RequestRec'
]
],
'overlap' => [
[
'APR::Table' ,
'APR::Table'
]
],
'overlay' => [
[
'APR::Table' ,
'APR::Table'
]
],
'override' => [
[
'Apache2::CmdParms' ,
'Apache2::CmdParms'
]
],
'override_opts' => [
[
'Apache2::CmdParms' ,
'Apache2::CmdParms'
]
],
'parent' => [
[
'Apache2::Directive' ,
'Apache2::Directive'
],
[
'ModPerl::InterpPool' ,
'ModPerl::InterpPool'
]
],
'parent_get' => [
[
'APR::Pool' ,
'APR::Pool'
]
],
'parse' => [
[
'APR::URI' ,
'APR::URI'
],
[
'APR::UUID' ,
'APR::UUID'
]
],
'parse_http' => [
[
'APR::Date' ,
'APR::Date'
]
],
'parse_rfc' => [
[
'APR::Date' ,
'APR::Date'
]
],
'parse_uri' => [
[
'Apache2::URI' ,
'Apache2::RequestRec'
]
],
'parsed_uri' => [
[
'Apache2::URI' ,
'Apache2::RequestRec'
]
],
'pass_brigade' => [
[
'Apache2::Filter' ,
'Apache2::Filter'
]
],
'password' => [
[
'APR::URI' ,
'APR::URI'
]
],
'password_get' => [
[
'APR::Util' ,
'APR::Util'
]
],
'password_validate' => [
[
'APR::Util' ,
'APR::Util'
]
],
'path' => [
[
'APR::URI' ,
'APR::URI'
],
[
'Apache2::CmdParms' ,
'Apache2::CmdParms'
],
[
'Apache2::ServerRec' ,
'Apache2::ServerRec'
]
],
'path_info' => [
[
'Apache2::RequestRec' ,
'Apache2::RequestRec'
]
],
'pconf' => [
[
'Apache2::Process' ,
'Apache2::Process'
]
],
'per_dir_config' => [
[
'Apache2::RequestRec' ,
'Apache2::RequestRec'
]
],
'perl' => [
[
'ModPerl::Interpreter' ,
'ModPerl::Interpreter'
]
],
'pnotes' => [
[
'Apache2::ConnectionUtil' ,
'Apache2::Connection'
],
[
'Apache2::RequestUtil' ,
'Apache2::RequestRec'
]
],
'pnotes_kill' => [
[
'Apache2::ConnectionUtil' ,
'Apache2::Connection'
],
[
'Apache2::RequestUtil' ,
'Apache2::RequestRec'
]
],
'poll' => [
[
'APR::Socket' ,
'APR::Socket'
]
],
'pool' => [
[
'APR::Brigade' ,
'APR::Brigade'
],
[
'Apache2::CmdParms' ,
'Apache2::CmdParms'
],
[
'Apache2::Connection' ,
'Apache2::Connection'
],
[
'Apache2::Process' ,
'Apache2::Process'
],
[
'Apache2::RequestRec' ,
'Apache2::RequestRec'
]
],
'pool_get' => [
[
'APR::ThreadMutex' ,
'APR::ThreadMutex'
],
[
'APR::ThreadRWLock' ,
'APR::ThreadRWLock'
]
],
'port' => [
[
'APR::SockAddr' ,
'APR::SockAddr'
],
[
'APR::URI' ,
'APR::URI'
],
[
'Apache2::ServerRec' ,
'Apache2::ServerRec'
]
],
'port_of_scheme' => [
[
'APR::URI' ,
'APR::URI'
]
],
'prev' => [
[
'APR::Brigade' ,
'APR::Brigade'
],
[
'Apache2::RequestRec' ,
'Apache2::RequestRec'
]
],
'print' => [
[
'Apache2::Filter' ,
'Apache2::Filter'
],
[
'Apache2::RequestIO' ,
'Apache2::RequestRec'
]
],
'printf' => [
[
'Apache2::RequestIO' ,
'Apache2::RequestRec'
]
],
'process' => [
[
'Apache2::ServerRec' ,
'Apache2::ServerRec'
]
],
'protection' => [
[
'APR::Finfo' ,
'APR::Finfo'
]
],
'proto_input_filters' => [
[
'Apache2::RequestRec' ,
'Apache2::RequestRec'
]
],
'proto_num' => [
[
'Apache2::RequestRec' ,
'Apache2::RequestRec'
]
],
'proto_output_filters' => [
[
'Apache2::RequestRec' ,
'Apache2::RequestRec'
]
],
'protocol' => [
[
'Apache2::RequestRec' ,
'Apache2::RequestRec'
]
],
'proxyreq' => [
[
'Apache2::RequestRec' ,
'Apache2::RequestRec'
]
],
'psignature' => [
[
'Apache2::RequestUtil' ,
'Apache2::RequestRec'
]
],
'push_handlers' => [
[
'Apache2::RequestUtil' ,
'Apache2::RequestRec'
],
[
'Apache2::ServerUtil' ,
'Apache2::ServerRec'
]
],
'puts' => [
[
'Apache2::RequestIO' ,
'Apache2::RequestRec'
]
],
'query' => [
[
'APR::URI' ,
'APR::URI'
],
[
'Apache2::MPM' ,
'Apache2::MPM'
]
],
'r' => [
[
'Apache2::Filter' ,
'Apache2::Filter'
]
],
'rationalize_mtime' => [
[
'Apache2::Response' ,
'Apache2::RequestRec'
]
],
'rdlock' => [
[
'APR::ThreadRWLock' ,
'APR::ThreadRWLock'
]
],
'read' => [
[
'APR::Bucket' ,
'APR::Bucket'
],
[
'Apache2::Filter' ,
'Apache2::Filter'
],
[
'Apache2::RequestIO' ,
'Apache2::RequestRec'
]
],
'recv' => [
[
'APR::Socket' ,
'APR::Socket'
]
],
'recvfrom' => [
[
'APR::Socket' ,
'APR::Socket'
]
],
'refcnt' => [
[
'ModPerl::Interpreter' ,
'ModPerl::Interpreter'
]
],
'register_auth_provider' => [
[
'Apache2::RequestUtil' ,
'Apache2::RequestUtil'
]
],
'register_provider' => [
[
'Apache2::Provider' ,
'Apache2::Provider'
]
],
'remote_host' => [
[
'Apache2::Connection' ,
'Apache2::Connection'
]
],
'remove' => [
[
'APR::Bucket' ,
'APR::Bucket'
],
[
'Apache2::Filter' ,
'Apache2::Filter'
]
],
'remove_loaded_module' => [
[
'Apache2::Module' ,
'Apache2::Module'
]
],
'req_override' => [
[
'Apache2::Command' ,
'Apache2::Command'
]
],
'request' => [
[
'Apache2::RequestUtil' ,
'Apache2::RequestUtil'
]
],
'request_config' => [
[
'Apache2::RequestRec' ,
'Apache2::RequestRec'
]
],
'request_time' => [
[
'Apache2::RequestRec' ,
'Apache2::RequestRec'
]
],
'restart_count' => [
[
'Apache2::ServerUtil' ,
'Apache2::ServerUtil'
]
],
'rflush' => [
[
'Apache2::RequestIO' ,
'Apache2::RequestRec'
]
],
'rpath' => [
[
'APR::URI' ,
'APR::URI'
]
],
'run' => [
[
'Apache2::SubRequest' ,
'Apache2::SubRequest'
]
],
'run_access_checker' => [
[
'Apache2::HookRun' ,
'Apache2::RequestRec'
]
],
'run_auth_checker' => [
[
'Apache2::HookRun' ,
'Apache2::RequestRec'
]
],
'run_check_user_id' => [
[
'Apache2::HookRun' ,
'Apache2::RequestRec'
]
],
'run_fixups' => [
[
'Apache2::HookRun' ,
'Apache2::RequestRec'
]
],
'run_handler' => [
[
'Apache2::HookRun' ,
'Apache2::RequestRec'
]
],
'run_header_parser' => [
[
'Apache2::HookRun' ,
'Apache2::RequestRec'
]
],
'run_log_transaction' => [
[
'Apache2::HookRun' ,
'Apache2::RequestRec'
]
],
'run_map_to_storage' => [
[
'Apache2::HookRun' ,
'Apache2::RequestRec'
]
],
'run_post_read_request' => [
[
'Apache2::HookRun' ,
'Apache2::RequestRec'
]
],
'run_translate_name' => [
[
'Apache2::HookRun' ,
'Apache2::RequestRec'
]
],
'run_type_checker' => [
[
'Apache2::HookRun' ,
'Apache2::RequestRec'
]
],
'satisfies' => [
[
'Apache2::Access' ,
'Apache2::RequestRec'
]
],
'sbh' => [
[
'Apache2::Connection' ,
'Apache2::Connection'
]
],
'scheme' => [
[
'APR::URI' ,
'APR::URI'
]
],
'seen_eos' => [
[
'Apache2::Filter' ,
'Apache2::Filter'
]
],
'send' => [
[
'APR::Socket' ,
'APR::Socket'
]
],
'send_cgi_header' => [
[
'Apache2::Response' ,
'Apache2::RequestRec'
]
],
'send_error_response' => [
[
'Apache2::Response' ,
'Apache2::RequestRec'
]
],
'send_mmap' => [
[
'Apache2::Response' ,
'Apache2::RequestRec'
]
],
'sendfile' => [
[
'Apache2::RequestIO' ,
'Apache2::RequestRec'
]
],
'sendto' => [
[
'APR::Socket' ,
'APR::Socket'
]
],
'server' => [
[
'Apache2::CmdParms' ,
'Apache2::CmdParms'
],
[
'Apache2::RequestRec' ,
'Apache2::RequestRec'
],
[
'Apache2::ServerUtil' ,
'Apache2::ServerUtil'
],
[
'ModPerl::InterpPool' ,
'ModPerl::InterpPool'
]
],
'server_admin' => [
[
'Apache2::ServerRec' ,
'Apache2::ServerRec'
]
],
'server_hostname' => [
[
'Apache2::ServerRec' ,
'Apache2::ServerRec'
]
],
'server_root_relative' => [
[
'Apache2::ServerUtil' ,
'Apache2::ServerUtil'
]
],
'server_scheme' => [
[
'Apache2::ServerRec' ,
'Apache2::ServerRec'
]
],
'server_shutdown_cleanup_register' => [
[
'Apache2::ServerUtil' ,
'Apache2::ServerUtil'
]
],
'set' => [
[
'APR::Table' ,
'APR::Table'
]
],
'set_basic_credentials' => [
[
'Apache2::RequestUtil' ,
'Apache2::RequestRec'
]
],
'set_content_length' => [
[
'Apache2::Response' ,
'Apache2::RequestRec'
]
],
'set_etag' => [
[
'Apache2::Response' ,
'Apache2::RequestRec'
]
],
'set_handlers' => [
[
'Apache2::RequestUtil' ,
'Apache2::RequestRec'
],
[
'Apache2::ServerUtil' ,
'Apache2::ServerRec'
]
],
'set_keepalive' => [
[
'Apache2::Response' ,
'Apache2::RequestRec'
]
],
'set_last_modified' => [
[
'Apache2::Response' ,
'Apache2::RequestRec'
]
],
'setaside' => [
[
'APR::Bucket' ,
'APR::Bucket'
]
],
'setup_client_block' => [
[
'Apache2::RequestIO' ,
'Apache2::RequestRec'
]
],
'short_name' => [
[
'Apache2::Process' ,
'Apache2::Process'
]
],
'should_client_block' => [
[
'Apache2::RequestIO' ,
'Apache2::RequestRec'
]
],
'size' => [
[
'APR::Finfo' ,
'APR::Finfo'
],
[
'ModPerl::TiPool' ,
'ModPerl::TiPool'
]
],
'slurp_filename' => [
[
'Apache2::RequestUtil' ,
'Apache2::RequestRec'
]
],
'some_auth_required' => [
[
'Apache2::Access' ,
'Apache2::RequestRec'
]
],
'spawn_proc_prog' => [
[
'Apache2::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'
],
[
'ModPerl::TiPoolConfig' ,
'ModPerl::TiPoolConfig'
]
],
'stat' => [
[
'APR::Finfo' ,
'APR::Finfo'
]
],
'status' => [
[
'Apache2::RequestRec' ,
'Apache2::RequestRec'
]
],
'status_line' => [
[
'Apache2::RequestRec' ,
'Apache2::RequestRec'
]
],
'strerror' => [
[
'APR::Error' ,
'APR::Error'
]
],
'subprocess_env' => [
[
'Apache2::RequestRec' ,
'Apache2::RequestRec'
]
],
'tag' => [
[
'APR::Pool' ,
'APR::Pool'
]
],
'temp_pool' => [
[
'Apache2::CmdParms' ,
'Apache2::CmdParms'
]
],
'test' => [
[
'APR::IpSubnet' ,
'APR::IpSubnet'
]
],
'the_request' => [
[
'Apache2::RequestRec' ,
'Apache2::RequestRec'
]
],
'timeout' => [
[
'Apache2::ServerRec' ,
'Apache2::ServerRec'
]
],
'timeout_get' => [
[
'APR::Socket' ,
'APR::Socket'
]
],
'timeout_set' => [
[
'APR::Socket' ,
'APR::Socket'
]
],
'tipool' => [
[
'ModPerl::InterpPool' ,
'ModPerl::InterpPool'
]
],
'top_module' => [
[
'Apache2::Module' ,
'Apache2::Module'
]
],
'trylock' => [
[
'APR::ThreadMutex' ,
'APR::ThreadMutex'
]
],
'tryrdlock' => [
[
'APR::ThreadRWLock' ,
'APR::ThreadRWLock'
]
],
'trywrlock' => [
[
'APR::ThreadRWLock' ,
'APR::ThreadRWLock'
]
],
'type' => [
[
'APR::Bucket' ,
'APR::Bucket'
]
],
'unescape_url' => [
[
'Apache2::URI' ,
'Apache2::URI'
]
],
'unload_package_xs' => [
[
'ModPerl::Util' ,
'ModPerl::Util'
]
],
'unlock' => [
[
'APR::ThreadMutex' ,
'APR::ThreadMutex'
],
[
'APR::ThreadRWLock' ,
'APR::ThreadRWLock'
]
],
'unparse' => [
[
'APR::URI' ,
'APR::URI'
]
],
'unparsed_uri' => [
[
'Apache2::RequestRec' ,
'Apache2::RequestRec'
]
],
'unset' => [
[
'APR::Table' ,
'APR::Table'
]
],
'untaint' => [
[
'ModPerl::Util' ,
'ModPerl::Util'
]
],
'update_mtime' => [
[
'Apache2::Response' ,
'Apache2::RequestRec'
]
],
'uri' => [
[
'Apache2::RequestRec' ,
'Apache2::RequestRec'
]
],
'used_path_info' => [
[
'Apache2::RequestRec' ,
'Apache2::RequestRec'
]
],
'user' => [
[
'APR::Finfo' ,
'APR::Finfo'
],
[
'APR::URI' ,
'APR::URI'
],
[
'Apache2::RequestRec' ,
'Apache2::RequestRec'
]
],
'user_id' => [
[
'Apache2::ServerUtil' ,
'Apache2::ServerUtil'
]
],
'useragent_addr' => [
[
'Apache2::RequestRec' ,
'Apache2::RequestRec'
]
],
'useragent_ip' => [
[
'Apache2::RequestRec' ,
'Apache2::RequestRec'
]
],
'valid' => [
[
'APR::Finfo' ,
'APR::Finfo'
]
],
'warn' => [
[
'Apache2::Log' ,
undef
],
[
'Apache2::Log' ,
undef
],
[
'Apache2::Log' ,
undef
]
],
'wild_names' => [
[
'Apache2::ServerRec' ,
'Apache2::ServerRec'
]
],
'write' => [
[
'Apache2::RequestIO' ,
'Apache2::RequestRec'
]
],
'wrlock' => [
[
'APR::ThreadRWLock' ,
'APR::ThreadRWLock'
]
]
};
our @EXPORT = qw(print_method print_module print_object) ;
our $VERSION = $mod_perl2::VERSION ;
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]];
}
}
}
my $methods_compat = {
gensym => [ 'Symbol::gensym' ,
'or use "open my $fh, $file"' ],
module => [ 'Apache2::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' ],
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 ,
'use CGI.pm or Apache2::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 ,
'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 ,
'' ],
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' ],
open => [ undef ,
'' ],
close => [ undef ,
'' ],
tmpfile => [ undef ,
'not in the Apache 2.0 API, ' .
'use File::Temp instead' ],
size_string => [ 'format_size' ,
'' ],
escape_uri => [ 'unescape_path' ,
'' ],
escape_url => [ 'escape_path' ,
'and requires a pool object' ],
unescape_uri => [ 'unescape_url' ,
'' ],
unescape_url_info => [ undef ,
'use CGI::Util::unescape() instead' ],
escape_html => [ undef ,
'ap_escape_html now requires a pool object' ],
parsedate => [ 'parse_http' ,
'' ],
validate_password => [ 'password_validate' ,
'' ],
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 sort 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] =~ /^(Apache2|ModPerl|APR)/))
? shift @args
: undef ;
print ( (lookup_method( $method , $object ))[0]);
}
}
sub sep { return '-' x ( shift () + 20) . "\n" }
sub lookup_method {
my ( $method , $object ) = @_ ;
unless ( defined $method ) {
my $hint = "No 'method' argument was passed\n" ;
return ( $hint );
}
$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" : "" ;
return $hint . "$comment" unless defined $replacement ;
$hint .= "use '$replacement' instead. $comment" ;
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" ;
return ( $hint , $module );
}
else {
if ( defined $object ) {
my $class = ref $object || $object ;
for my $item ( @items ) {
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 );
}
}
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 ;
my @modules = sort 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 );
}
}
}
}
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 );
}
sub lookup_object {
my ( $object ) = shift ;
unless ( defined $object ) {
my $hint = "no 'object' argument was passed\n" ;
return ( $hint );
}
_get_objects() unless $objects ;
$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;
|