Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6087103
  • 博文数量: 2759
  • 博客积分: 1021
  • 博客等级: 中士
  • 技术积分: 4091
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-11 14:14
文章分类

全部博文(2759)

文章存档

2019年(1)

2017年(84)

2016年(196)

2015年(204)

2014年(636)

2013年(1176)

2012年(463)

分类: PERL

2014-08-28 21:45:22

原文地址: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";
转载自:

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