2012-08-16 18 views
1

我想compilate this scrip,但我有這樣的信息:的Perl:錯誤消息:不容定位...在@INC

無法找到電子郵件/ Address.pm在@INC( @INC包含:C:/草莓/ perl/lib C:/ 草莓/ perl/site/lib C:\ strawberry \ perl \ vendor \ lib。)位於C:/ strawberry/perl/ lib/Regexp/Common/Email/Address.pm line 9. BEGIN失敗 - 在C:/ strawberry/perl/lib/Regexp/Common/Email/ Address.pm第9行中斷編譯。 編譯在(eval 1)第1行。 BEGIN失敗 - 編譯在C:\ examples \ script2.pl中止第4行

我不理解,因爲我真的有這根

C:/strawberry/perl/lib/Regexp/Common/Email/Address.pm

有沒有人知道爲什麼當我嘗試編寫我的腳本時出現此錯誤消息?

謝謝你這麼多


我試圖用這樣一句話:

使用LIB 'C:/草莓/ perl的/ lib目錄/正則表達式/通用/電子郵件';

,並把作爲評價這兩個句子:

use Regexp::Common qw[Email::Address]; 
    use Email::Address 

然後我得到這個錯誤

Global symbol "%RE" requires explicit package name at C:\examples\script2.pl lin 
e 10.Execution of C:\examples\script2.pl aborted due to compilation errors. 

從來就在perldiag

全局符號採取一看「 %s「需要明確的包名稱 (F)你已經表示「使用嚴格」或「使用嚴格變量」,這表明所有變量必須是詞法範圍的(使用「我的」或「狀態」),事先使用「我們的」聲明,或者顯式限定全局變量在(使用「::」)。

但我覺得它對我來說有點理論,因爲我明白你必須在代碼的開始使用'use'這個句子來使用包。

順便說一句,這是我的代碼:

use Regexp::Common qw[Email::Address]; 
    use Email::Address; 
    while (<>) { 
    my (@found) = /($RE{Email}{Address})/g; 
    my (@addrs) = map $_->address, Email::Address->parse("@found"); 
    print "X-Addresses: ", join(", ", @addrs), "\n"; 
    } 

我得到這個代碼from a question I asked before.

回答

9

我認爲這個問題是,你必須安裝Regexp::Common::Email::Address。但是,您還需要Email::Address,這是一個單獨的模塊。也就是說,您還應該在C:/strawberry/perl/lib/Email/Address.pm中安裝模塊。

嘗試使用CPAN安裝Email::Address,看到What's the easiest way to install a missing Perl module?


更新多一點解釋:

Perl模塊都在一個分層的方式組織。包分隔符::等於模塊庫路徑中的目錄。模塊的全名/含義源自包本身的名稱和它的安裝路徑。假設您有模塊,稱爲Restaurant::Bill,Hat::BillNames::Male::Bill。你將有三個不同的文件,稱爲Bill.pm,但它們會代表非常不同的概念。他們將通過他們的模塊庫中的路徑彼此區分。