来源:
http://www.cnblogs.com/itech/archive/2010/11/22/1884345.html
相同:
都可以用来引用module(.PM)。
不同:
1) 区别在于USE是在当前默认的@INC里面去寻找,一旦模块不在@INC中的话,用USE是不可以引入的,但是require可以指定路径;
2)use引入的名称不需要后缀名,默认找.PM文件,而require需要后缀名,且后缀名可以为.PM或.PL;
实例:c:perl目录下3个文件如下(且module文件的最后必须有1;)
1 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->#file : CallModule.pl 2 use strict; 3 4 BEGIN { 5 my $scriptDir = $0; 6 $scriptDir =~ s:\:/:g; 7 $scriptDir =~ s,/?[^/]+$,,; 8 $scriptDir = "." if ($scriptDir eq ""); 9 unshift(@INC, $scriptDir); 10 } 11 12 #require "c:\perl\pmodule1.pl"; 13 require "pmodule1.pl"; 14 use pmodule2; 15 16 Hello1(); 17 Hello2(); 18 19 print "I am caller! "; 20 21 exit 0; 22 23 #file : pmodule1.pl 24 use strict; 25 26 sub Hello1 27 { 28 print "Hello1 "; 29 } 30 31 1; 32 33 #file : pmodule2.pm 34 use strict; 35 36 sub Hello2 37 { 38 print "Hello2 "; 39 } 40 41 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:PerllibMyDirectory
C:PerlextlibMyDirectory
C:PerlsitelibMyDirectory