[perl]名称空间namespace、包package和模块

# perl 名称空来决定量和子程序示符的可访问性。也可以用包来访问在其他名的文件中定示符

# perl 的大多数作用域规则都是自 的概念衍生出来的

# 个包都有自己的符号表 其中包含的所有的量和子程序名字,默情况下perl文件中的全局示符属于main包的符号表的一部分。事上,perl没有真正的全局量,应该叫做报变量。

# 字典量不会插入到包的符号表中。个定了字典量的代码块都有它自己的一个临时区域,专门用来保存字典量,叫做 草稿区。

# 于包来,它的符号表就是一个散列--示符为键,内存位置为值

 

# package 一个包

package PackageName;

# package 一个包

our $variable="varlue"; #

my $secret = "my varlue"; # 字典

# 字典 只能在定的文件内使用

 

# require 入一个包

require PackageName; # 入一个包

# require 关键字指示 perl 找到一个名 PackageName.pm 的包,并把它添加到当前程序中。

# 首先在当前目个包文件,如果没有找到就会在由数 @INC 指定的目找。在任何候只要指示 perl 把一个文件包括来,perl 就会在当前目 @INC 指定的目录进找。require 关键字已假定有一个.pm展名,所以pm可加可不加。使用require 包括的到程序里的包会在程序行期间载入。

$PackageName::variable; # 操作一个包

$main::varibale; # 操作一个main包中的 当不加包名称 使用当前包

 

# use

# 上就是一包,它可以在不提供全名称的情况下使用模中定示符,就像在当前包中定的一

#

-------- FirstModule.pm ---------

#! /usr/bin/perl

# Fig 6.20: FirstModule.pm

# Our first module.

 

package FirstModule; # 包名

 

# the following two lines allow this module to export its

# identifiers for use in other files.

use Exporter; # user module Exporter # Exporter

our @ISA=qw(Exporter); # this module " is a " Exporter # 特殊的内建数 @ISA 定当前包

# @array and &greeting are imported automatically into a

# file that uses this module

our @EXPORT=qw(@array &greeting); # @array &greeting 子程序 入到其他名称空示符

our @array=(1..3); # 声明 @array

sub greeting{ # 声明 &greeting 子程序

  print "Modules are handy!";

}

return 1; # indicate successful import of module # 诉导入者 当前模块导入成功

-------- end FirstModule.pm ---------

use FirstModule ; # FirstModule

# use 入模文件后须为.pm,但 require 可以使用其他后

# use 的特点

use v5.6.0 ; # 当前perl的版本号,如果比指定的版本小,便会错误,而中止程序

use FirstModule 2.0; # 倒入模的版本 如果入的模的版本低,便会错误,而中止程序

our $VERSION=2.0; # 定当前模的版本号

use FirstModule qw( @array ); #只从模入指定的 @array

no # 不从指定的名称空入指定 法等价于 use

# 预编译指令 use strict,use warnings

use strict ;# 迫声明添加 作用域 全局或字典;迫使用引号封字符串;迫明确个子程序。

use strict 'vars'; # 迫声明添加 作用域 全局或字典;

use strict 'subs';# 迫使用引号封字符串;迫明确个子程序。

use vars qw( 1 2 ); # 声明全局

use warnings; # 打印警告信息

no strict; # 关闭语检查

use constant PI => 3.1415926; # 建常量示符

use diagnostics; #启用断效果

  enable(); #

  disable(); # 禁用

use integer; # 采用整数运算方式

 

-------------------------------------------------------------------

-- codes -- http://www.perlchina.org/archive/archive.php?action=archive&page=33

package MyModule; # 包名

 

use strict; # 检查

use Exporter; # Exporter

use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS); # 声明全局包

 

$VERSION     = 1.00; # 声明版本号

@ISA         = qw(Exporter); # 使用 Exporter 定当前包可用于模

@EXPORT      = (); # 声明被出的示符所有全局包

@EXPORT_OK   = qw(func1 func2); # 声明被出的函数

%EXPORT_TAGS = ( DEFAULT => [qw(&func1)],

                 Both    => [qw(&func1 &func2)]); # 义输标签

# 函数声明

sub func1  { return reverse @_  }

sub func2  { return map{ uc }@_ }

 

1; # 返回 指示入包成功

-- end codes --

--------------------------------

          hello, world

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值