perl學習之:use & require


相同:

都可以用來引用module(.PM)。

 

不同:

1) 區別在於USE是在當前默認的@INC里面去尋找,一旦模塊不在@INC中的話,用USE是不可以引入的,但是require可以指定路徑;

2)use引入的名稱不需要后綴名,默認找.PM文件,而require需要后綴名,且后綴名可以為.PM或.PL;

實例:c:\perl目錄下3個文件如下(且module文件的最后必須有1;)

復制代碼
#file : CallModule.pl
use strict;

BEGIN {
    my $scriptDir = $0;
    $scriptDir =~ s:\\:/:g;
    $scriptDir =~ s,/?[^/]+$,,;
    $scriptDir = "." if ($scriptDir eq "");
    unshift(@INC, $scriptDir);
}

#require "c:\\perl\\pmodule1.pl";
require "pmodule1.pl";
use pmodule2;

Hello1();
Hello2();

print "I am caller!\n";

exit 0;

#file : pmodule1.pl
use strict;

sub Hello1
{
    print "Hello1\n";
}

1;

#file : pmodule2.pm
use strict;

sub Hello2
{
    print "Hello2\n";
}

1;
復制代碼

 

 

3)use語句是編譯時引入的,require是運行時引入的; 下面的例子是錯誤的:
use Config;
if( $Config{'osname'} eq "MSWin32" )
{
    use Win32Module;
}
else
{
    use UnixModule;
}
正因為use是發生在編譯期,代碼沒有執行,所以$Config變量的值是無法判斷的。在內部,use其實調用了require和import靜態函數。import()函數告訴包哪些特征將要被導入當前包中,這意味着用之前不必驗證函數或者變量是否合法。而require是不會調用import()的。

4)use引入模塊的同時,也引入了模塊的子模塊。而require則不能引入,要在重新聲明;例如

use my

my中包含了一個Module.pm

而require 則需要引入

require my

require my::Module.pm

如果不想讓use引入Module.pm則可以用 use require() 加一對括號來說明即可。

5)USE引用模塊時,如果模塊名稱中包含::雙冒號,該雙冒號將作為路徑分隔符,相當於Unix下的/或者Windows下的\。 如:
use MyDirectory::MyModule;
編譯器將從@INC指定的目錄下的MyDirectory子目錄去尋找MyModule模塊, 類似
如下路徑:
C:\Perl\lib\MyDirectory
C:\Perl\ext\lib\MyDirectory
C:Perl\site\lib\MyDirectory

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM