如何在perl中包含和使用pm文件

时间:2013-02-14 17:09:07

标签: perl include package perl-module

好的,这是主文件使用那些包含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文件放在与此目录相同的目录中,但由于找不到

而失败

enter image description here

这些文件就像这样开始

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

3 个答案:

答案 0 :(得分:7)

Perl希望在Foo::Bar::Baz

中找到$PERL5LIB/Foo/Bar/Baz.pm

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

您似乎正在使用Windows ...

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

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

cpan Net::OAuth2::Client

在命令行上。

答案 1 :(得分:5)

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

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

输出将是可以找到这些Perl模块的所有目录的列表。

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

use Foo::Bar:Barfu;

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

这些似乎都是CPAN模块。如果您使用的是Strawberry Perl,则可以使用Console窗口中的cpan命令来安装这些模块。只需在命令行上键入cpan,然后按照说明操作即可。您需要在第一次执行此操作,因此cpan可以自行配置。

一旦完成,你可以在下次做这样的事情:

$ cpan install Dancer

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

如果您正在使用ActiveState Perl,请尝试使用Perl模块管理器(PMM),它应位于ActiveState下的“开始”菜单中。您也可以通过cpan使用ActiveState,但是您需要执行bit of configuring才能使其正常运行。

答案 2 :(得分:0)

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

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

    使用Dancer; #module的名称必须与文件名相同

    使用客户; #...

    使用普通; #common not Common

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

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