2013-02-14 80 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模塊文件。