编程学习biancheng.45soft.com 本站提供了各种在线教程和资料,供大家学习与参考.
编程学习
当前位置: 主页 > Perl > pragma模块 >

Perl pragma模块



pragma(编译指示模块)是一种特殊类型的模块,影响着程序的编译阶段。有些编译指示模块(称为pragmata,简称为pragma)还可以影响程序的运行阶段。把它们当作一种编译器提示。因为它们需要在编译时出现,所以只有通过use或者no调用它们时它们才能运转,而到了require或者do运行时,编译早就完成了。


习惯上,pragma名字都是用小写字符写的,因为小写模块名字是为Perl版本自己保留的。在写你自己的模块时,至少在模块名字中使用一个大写字符以避免和pragma名字冲突。


和普通模块不同的是,大多数pragma的影响局限于调用它们的最内层的闭合块。换句话说,它们是词法作用域的,就好像my变量一样。通常,一个外层块的词法作用域包括任何嵌在它内部的内层块,但内层块可以用no语句撤消一个来自外层块
的词法作用域pragma:

use strict;
use integer;
{
    no strict 'refs';       # 允许符号引用
    no integer;             # 假设是浮点算术
    # ....
}

pragma比Perl带的其他模块用得更多一些,而它们也形成了完整而又基本的Perl编译环境的一部分。如果你不知道怎样给编译器传递提示,那么你很难把编译器用好,因此我们将在描述pragma上下一些工夫。


另外一件要注意的事情是,我们经常拿pragma做特性原型,稍后再把它们编码成“真正”的语法。因此你会在一些程序里看到废弃的pragma,如use attrs,现在它的功能已经是子例程声明语法直接支持的一部分。类似地,use vars现在正处在被our声明代替的过程中。而use subs可能将来会被普通子例程声明中的override属性代替。我们现在正以快得可怕的速度破坏做事情的老方法,但我们认为新方法会更漂亮一些。

Perl
Perl pragma模块