来源:

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;)

 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->#file : CallModule.pl
use strict; BEGIN {
my $scriptDir = $;
$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 ; #file : pmodule1.pl
use strict; sub Hello1
{
print "Hello1\n";
} ; #file : pmodule2.pm
use strict; sub Hello2
{
print "Hello2\n";
} ;

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

perl的USE和require的更多相关文章

  1. perl 判断数组相等的三种方法

    1.数组相等,数组成员相同,位置也相同 一般的如果判断@array1 等于 @array2 a.数组长度相同 $#array1=$#array2, 比较数组长度,不能使用length函数,length ...

  2. SWIG 3 中文手册——4. 脚本语言

    目录 4 脚本语言 4.1 两种语言的概览 4.2 脚本语言如何调用 C? 4.2.1 包装器函数 4.2.2 变量链接 4.2.3 常量 4.2.4 结构体与类 4.2.5 代理类 4.3 构建脚本 ...

  3. markdown-it + highlight.js简易实现

    markdown-it 官方demo markdown-it 文档 1.配置highlightjs,针对markdown中各种语言高亮,针对对应的标签 pre code 里面的样式 -- index. ...

  4. Cracking Digital VLSI Verification Interview 第三章

    目录 Programming Basics Basic Programming Concepts Object Oriented Programming Concepts UNIX/Linux Pro ...

  5. Perl 之 use(), require(), do(), %INC and @INC

    来源: http://www.cnblogs.com/itech/archive/2013/03/12/2956185.html 转自:http://perl.apache.org/docs/gene ...

  6. perl学习之:use & require

    相同: 都可以用来引用module(.PM). 不同: 1) 区别在于USE是在当前默认的@INC里面去寻找,一旦模块不在@INC中的话,用USE是不可以引入的,但是require可以指定路径: 2) ...

  7. perl学习之:use and require

    本文和大家重点学习一下Perl use和require用法对比,这两个函数都是一个意思,加载和引用Perl的模块,或者是子程序,区别在于Perl use是在当前默认的里面去寻找,一旦模块不在指定的区域 ...

  8. Perl 的面向对象编程

    转自 http://net.pku.edu.cn/~yhf/tutorial/perl/perl_13.html 拓展阅读 http://bbs.chinaunix.net/forum.php?mod ...

  9. PCRE Perl Compatible Regular Expressions Learning

    catalog . PCRE Introduction . pcre2api . pcre2jit . PCRE Programing 1. PCRE Introduction The PCRE li ...

随机推荐

  1. JavaBean 反射机制实现自动配置数据

    声明:该版本是没完成的.该博文只做记录代码用 String memberType(String name) throws Exception { return getType(getClass().g ...

  2. Items divided

    Items divided 题目链接:http://acm.xidian.edu.cn/problem.php?id=1183 参考:http://www.cnblogs.com/wanghetao/ ...

  3. python 强制结束线程的坑

    网上流传了两种能强制结束线程的错误姿势 第一种:通过setDaemon来结束线程 http://www.cnblogs.com/jefferybest/archive/2011/10/09/22040 ...

  4. HttpWebRequest的简单使用

    新建新的空网站和一个default.aspx页面测试,实验例子: using System; using System.Collections.Generic; using System.IO; us ...

  5. 《JS权威指南学习总结--8.6 函数闭包》

    内容要点: 和其他大多数现代编程一样,JS也采用词法作用域,也就是说,函数的执行依赖于变量作用域,这个作用域是在函数定义时决定的,而不是函数调用时决定的. 为了实现这种词法作用域,JS函数对象的内部状 ...

  6. YII使用PHPExcel导入Excel文件的方法

    1.下载phpexcel,将压缩包中的classes复制到protected/extensions下并修改为PHPExcel. 2.修改YII配置文件config/main.php 'import'= ...

  7. Java 反射 Array动态创建数组

    Java 反射 Array动态创建数组 @author ixenos 注:java.lang.reflect.Array 是个反射工具包,全是静态方法,创建数组以多维数组为基准,一维数组只是特殊实现 ...

  8. 4、mybatis动态sql+struts2(通配符+全局配置+分页)

    1.创建userinfo.sql数据库脚本 create table USERINFO ( id NUMBER not null, uname ), password ), age NUMBER ) ...

  9. 2、Web应用程序中的安全向量 -- CSRF/XSRF(跨站请求伪造)

    CSRF的概念可以分为两类:XSS和混淆代理. 混淆代理中的"代理"是指用户的浏览器.CSRF是基于浏览器的工作方式运作的.用户登录到一个站点后,用户的信息将会存储在cookie中 ...

  10. 【转】Spring事务超时时间可能存在的错误认识

    1.先看代码 1.1.spring-config.xml <bean id="dataSource" class="org.springframework.jdbc ...