Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2396148
  • 博文数量: 328
  • 博客积分: 4302
  • 博客等级: 上校
  • 技术积分: 5486
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-01 11:14
个人简介

悲剧,绝对的悲剧,悲剧中的悲剧。

文章分类

全部博文(328)

文章存档

2017年(6)

2016年(18)

2015年(28)

2014年(73)

2013年(62)

2012年(58)

2011年(55)

2010年(28)

分类: PERL

2014-08-26 22:38:41

use 声明装载一个模块(如果它还没有被装载),并且把子过程和变量从这个命名模块输入到当前包。(从技术上来讲,它从那个命名模块向当前包输入一些语意,通常是通过把一些子过程或者变量名作成你的包里的别名的方法。)大多数 use 的声明看起来象:

  1. use MODULE LIST;

这样和下面是完全一样的:

  1. BEGIN { require MODULE; import MODULE LIST; }

BEGIN 迫使 require 和 import 在编译时发生。require 确保该模块在还没有装载的时候装入内存。import 不是内建的函数——它只是一个普通的类方法,调用名字叫 MODULE 的包,告诉该模块把列表里的特性拖到当前包里来。模块可以用自己喜欢的任何方法实现它的输入方法,尽管大多数只是通过从 Exporter 类中继承 import 方法。Exporter 类在 Exporter 模块中定义。参阅第十一章,模块,以及 Exporter 模块获取更多信息。如果找不到 import 方法,那么调用将不声不响地忽略。
如果你不希望你的名字空间被修改,那么明确地提供一个空列表:

  1. use MODULE ();

它和下面的代码完全一样:

  1. BEGIN { require MODULE; }

因为 use 提供了一个非常开放的接口,所以用法(编译器指示器)也是通过模块来实现的。当前实现了的用法包括:

  1. use autouse 'Carp' => qw(carp croak);
  2. use bytes;
  3. use constant PI => 4 * atan2(1,1);
  4. use diagnostics;
  5. use integer;
  6. use lib '/opt/projects/spectre/lib';
  7. use locale;
  8. use sigtrap qw(die INT QUIT);
  9. use strict qw(subs vars refs);
  10. use warnings "deprecated";

许多这些用法模块向当前词法范围输入语意。(它和普通模块不同,普通模块只是向当前包里输入符号,而除了该词法范围是在带有该包的情况下编译的以外,那些符号和当前词法范围没有什么关系。
还有一个对应的声明,no,它“戒除”任何原来用 use 输入的东西,让它们变得不再重要:

  1. no integer;
  2. no strice 'refs';
  3. no utf8;
  4. no warnings "unsafe";
转载自:

阅读(16953) | 评论(0) | 转发(3) |
0

上一篇:Perl Module 模块

下一篇:哈希算法

给主人留下些什么吧!~~