2

好的,这就是主文件使用那些包含 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;
4

3 回答 3

9

Perl 期望Foo::Bar::Baz$PERL5LIB/Foo/Bar/Baz.pm

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

您似乎在使用 Windows……</p>

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

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

cpan Net::OAuth2::Client

在命令行上。

于 2013-02-14T17:12:43.727 回答
5

有一个名为 Perl 的变量@INC列出了搜索这些 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 下的开始菜单中。您也可以通过 使用 ActiveState cpan,但您需要进行一些配置才能使其正常工作。

于 2013-02-14T17:45:36.177 回答
0

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

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

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

    使用客户端;# ...

    使用普通;# 普通不普通

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

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

于 2013-02-14T19:54:55.130 回答