Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1108150
  • 博文数量: 300
  • 博客积分: 37
  • 博客等级: 民兵
  • 技术积分: 772
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-26 04:46
文章分类
文章存档

2017年(4)

2016年(7)

2015年(19)

2014年(72)

2013年(71)

2012年(127)

分类: PERL

2014-08-28 20:22:51

原文地址:Perl use 详解 作者:huaius

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";
转载自:

阅读(1027) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~