【问题标题】:How to include and use pm files in perl如何在 perl 中包含和使用 pm 文件
【发布时间】:2013-02-14 17:09:07
【问题描述】:

好的,这就是主文件如何使用那些包含 pm 文件的方式

use Dancer;
use Net::OAuth2::Client;
use HTTP::Request::Common;

sub client {
   Net::OAuth2::Client->new(
     '0', # OAuth 2.0 client_id
     '1234567890abcdef', # OAuth 2.0 client_secret
     site => 'http://www.deviantart.com',
     authorize_path => 'https://www.deviantart.com/oauth2/draft15/authorize?response_type=code',
     access_token_path => 'https://www.deviantart.com/oauth2/draft15/token?grant_type=authorization_code',
     access_token_method => 'GET',
   )->web_server(
     redirect_uri => uri_for('/auth/deviantart/callback')
   );
}

我已将这些 PM 文件放在与此相同的目录中,但由于找不到而失败

这些文件是这样开始的

package Net::OAuth2::Client;
package HTTP::Request::Common;
package Dancer;

【问题讨论】:

    标签: perl include package perl-module


    【解决方案1】:

    Perl 期望在 $PERL5LIB/Foo/Bar/Baz.pm 中找到 Foo::Bar::Baz

    它还期望模块附带它们的依赖项。不要只复制特定的.pm 文件。使用cpanm(或cpan 或其他CPAN 安装程序)正确安装模块。

    您似乎在使用 Windows……

    如果您使用的是 ActiveState Perl,那么您可能应该查看它的 PPM 安装程序。

    如果你使用的是 Strawberry Perl,那么它会有一个 cpan 安装程序,你可以直接运行:

    cpan Net::OAuth2::Client
    

    在命令行上。

    【讨论】:

    • 其实可以是@INC列表中的任意目录。 @INC 通常包含当前目录,所以这些也可以是当前目录下的子目录。
    【解决方案2】:

    有一个名为@INC 的Perl 变量列出了搜索这些Perl 模块的目录。运行这一班轮:

    $ perl -e 'print join ("\n", @INC) . "\n";'
    

    输出将是这些 Perl 模块所在的所有目录的列表。

    现在,您必须了解这些模块的结构。当一个模块说:

    use Foo::Bar:Barfu;
    

    这意味着有一个名为Foo/Bar/Barfu.pm 的文件位于这些目录之一中。这就是 Perl 知道如何找到这些模块的方式。当然,如果这些模块包含必须编译并与模块链接的二进制代码,那么所有的赌注都将失败。

    这些似乎都是 CPAN 模块。如果您使用的是 Strawberry Perl,您可以使用控制台窗口中的cpan 命令来安装这些模块。只需在命令行上键入cpan 并按照说明进行操作。您需要在第一次这样做,所以cpan 可以自行配置。

    完成后,您下次可以这样做:

    $ cpan install Dancer
    

    这将(运气好的话)为您安装 Dancer 模块。这也将运行所有测试,并在需要时进行任何类型的 C 编译。

    如果您使用 ActiveState Perl,请尝试使用 Perl 模块管理器 (PMM),它应该位于 ActiveState 下的开始菜单中。您也可以通过cpan 使用 ActiveState,但您需要使用bit of configuring 才能使其工作。

    【讨论】:

      【解决方案3】:

      如果您不必从 cpan 安装它们,您应该按照以下步骤操作:

      1. 检查文件中是否没有任何依赖项:Client.pm、Dancer.pm、common.pm。您可以从以 use some_module; 开头的文件中的字符串中知道它。但是如果使用了其他一些模块,那么您应该使用最简单的方法是 cpan。
      2. 假设文件中没有任何依赖关系。在这种情况下,您已使用“.pm 文件的名称必须与包名称相同”的规则重命名这些文件;进入该文件。 有两种方法:第一种在主文件中你应该这样写:

        使用舞者; # 模块名必须与文件名相同

        使用客户端; # ...

        使用常见的; # 普通不普通

      第二种方法是:为每个 .pm 文件创建一些目录。例如,如果您的模块名称为package Net::OAuth2::Client;,那么您必须将一些目录设为./Net/OAuth2/Client.pm。符号::/ 相同,表示将在其中找到模块的目录路径。

      附言./ 目录中的任何 .pm 模块文件当然会找到,如果您使用正确的名称。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-17
        • 2011-02-07
        • 1970-01-01
        • 2016-02-05
        • 2011-03-25
        • 2011-07-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多