2013-02-14 74 views
1

确定这是主要的文件是如何使用的包括PM文件如何包含在Perl中使用时文件

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; 

回答

7

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

它也期望模块带有它们的依赖关系。不要只复制具体的.pm文件。使用cpanm(或cpan或另一个CPAN安装程序)正确安装模块。

你似乎是使用Windows ...

如果您正在使用的ActiveState Perl的,那么你或许应该看看它的PPM安装程序。

如果你正在使用Perl的草莓,那么它将有一个CPAN安装程序,你可以运行:

cpan Net::OAuth2::Client 
在命令行上

+1

实际上,它可以是'@ INC'列表中的任何目录。 '@ INC'通常包含当前目录,因此它们也可以是当前目录下的子目录。 – 2013-02-14 20:21:22

3

有一个名为@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 

,这将(运气)安装舞者模块为您服务。这也将运行所有测试,并根据需要执行任何类型的C编译。

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

0

如果你没有从CPAN安装它们,你应该这样做遵循的步骤:

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

    使用的舞者;#模块的名称必须是相同的文件名

    使用客户端;#...

    使用常见;#常见不常见

第二种方式是:为每个.pm文件创建一些目录。例如,如果你是mo dule的名字是package Net::OAuth2::Client;,所以你必须制作一些dirs作为./Net/OAuth2/Client.pm。标志::与用于查找模块的目录路径的/相同。

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