• 第6章 模块


    Perl 有着大量的第三方模块(module,即功能库) 可以使用,这也是为什么Perl如此成功的原因。

    Perl 允许你将代码划分成一个或多个可重用的模块,在这一章,我们将学习如何去完成下面的工作:

    1.使用关键字package 来定义模块

    2.使用use和require 来加载预定义模块,我们在前面章节中已经看到了几个使用use的例子

    3.使用”::” 记号来存取包的特定变量和子例程

    4.在运行时加载函数

    包的基本知识

    关键词package 标志这一个新的名字空间的开始,在它之后声明的所有的全局标示符

    (包括变量名,子例程,文件句柄,打印格式和目录句柄) 都将属于这个包

    下面是你如何使用另外一个包中的全局符号的例子:

    package ATM; ###开始一个新的名字空间

    BankAccount::deposit(10); ##调用一个外部子例程

    print $BankAccount::total; ##存取一个外部变量

    既然package 语句只表明一个有效的名字空间,因此 你可以在不同的名字空间中自由切换:

    package A;

    a=10;            ##这个a位于包A中

    package B;

    a=20;           ##这个a位于包B中,而且同其他的$a完全独立

    包与变量:

    在第三章”Typeglob与符号表”中,我曾提到所有的全局名字都位于一个符号表中。

    这有点像一个善意的谎言,实际上每个包都有它自己的符号表,它们之间互不相同。

    在包main中定义的标识符并不会被特别对待,除了有一点例外,那就是你还可以以另一种

    形式”::x:x.

    那些诸如|,_,@ARGV 和%ENV 之类的内建变量是属于包main的,而且

    Perl 允许你在其他包中直接使用它们,而无须加上前缀main::. 这些是Perl中唯一真正的全局变量。

    你也许还记得词法变量(my) 同符号和typeglob 没有联系,因此也就与包没有任何关系。

    下面的表达式将导致编译错误:

    my $bankAccount::total; ##错误

    包有文件:

    同一个包的声明可以放在多个文件中,或者多个包可以在一个文件中声明。

    按照惯例,一个包通常有它自己的文件,而且其文件名为package.pm或者package.pl

    以.pm为后缀的文件被称为Perl 模块而在后缀为.pl的文件中的包通常则被称为库。

    关键词require 只是把一个文件加载到程序中(在shell 中的说法就是source它),

    这实质上于C语言中的#include相同,只是Perl用不着关心该文件是否已经装载过了。

    加载路径 首先在内建数组@INC 中指定的路径中查找使用use或require 给定的文件。

    默认情况下,@INC 中包含了在解释器安装建立时指定的一些标准路径名。在我的机器上,@INC的内容如下:

    jrhmpt01:/root# perl -e ‘print “@INC ”;’
    /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl

    /usr/lib64/perl5 /usr/share/perl5 .

    私有性:

    Perl 中的符号是可以任意存取的,信息隐藏并不是强制的。

  • 相关阅读:
    linux自动清理30天之前的文件
    Oracle树查询及相关函数
    jackson循环引用导致序列化stackOverFlow的解决
    java核心技术36讲笔记
    Quartz学习
    Quartz学习
    java核心技术36讲
    git常用命令
    CTCall简介(后续会继续补充)
    自定义导航栏,隐藏导航栏底部的灰色线条
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13351187.html
Copyright © 2020-2023  润新知