perl的package和module
来源:
http://www.cnblogs.com/itech/archive/2010/03/23/1692836.html
一 package
1) package 相当于C++中的namespace,不同的package下可以定义相同的变量和subroutines;
2)在一个pl文件中可以定义多个package,每个package有一个单独的symboltable,每个symboltable中包含了此package中的变量和subroutines;
3) package mypack; 此语句定义一个名为mypack的包,从此以后定义的所有变量和子程序的名字都存贮在该包关联的符号表中,直到遇到另一个package语句为止。默认地存储在main package中。
4)在一个包中可以引用其它包中的变量或子程序,包名和变量名用双冒号隔开,即$mypack::var。
实例:

二 module
1)module是perl的library,相当于C++中的lib或dll,是功能相近的subroutines的集合;
2)module通常存储在同名的pm文件中;
3)通常module也同时定义在一个同名的package中;
4)EXPORT用来导出subroutines,EXPORT_OK用来导出变量;
5)use mymodule;用来引用mymoudule,no mymodule来取消mymodule的引用;
实例:

USE引用模块时,如果模块名称中包含::双冒号(在MyModule.pm文件中:package MyDirectory::MyModule),该双冒号将作为路径分隔符,相当于Unix下的/或者Windows下的\。 如:
use MyDirectory::MyModule;
编译器将从@INC指定的目录下的MyDirectory子目录去寻找MyModule模块, 类似
如下路径:
C:\Perl\lib\MyDirectory
C:\Perl\ext\lib\MyDirectory
C:Perl\site\lib\MyDirectory
下的MyModule.pm文件。
三 Libraries
可以归于一般的perl文件,或module中。属于哪类,就按哪类定义,哪类使用。
可以忽略认为有这个分类
四 实例
@EXPORT contains list of symbols (subroutines and variables) of the module to be exported into the caller namespace.
@EXPORT_OK does export of symbols on demand basis.
Let us use the following sample program to understand Perl exporter.
package Arithmetic; use Exporter; # base class of this(Arithmetic) module
@ISA = qw(Exporter); # Exporting the add and subtract routine
@EXPORT = qw(add subtract); 默认输出
# Exporting the multiply and divide routine on demand basis.
@EXPORT_OK = qw(multiply divide); 指定输出 sub add
{
my ($no1,$no2) = @_;
my $result;
$result = $no1+$no2;
return $result;
} sub subtract
{
my ($no1,$no2) = @_;
my $result;
$result = $no1-$no2;
return $result; } sub multiply
{
my ($no1,$no2) = @_;
my $result;
$result = $no1*$no2;
return $result;
} sub divide
{
my ($no1,$no2) = @_;
my $result;
$result = $no1/$no2;
return $result; }
In the above example, we defined the arithmetic module with four functions. By default add() and subtract() functions are exported to the user’s/caller’s namespace.
“use Arithmetic” statement imports the subroutines from Arithmetic module that are exported by default.
“use Arithmetic qw(multiply divide)” indicates that these two routines gets exported only when it is specifically requested as shown in the following code snippet.
#! /usr/bin/perl use strict;
use warnings; use Arithmetic;
use Arithmetic qw(multiply divide); print add(1,2),"\n";
print multiply(1,2),"\n";
As we seen above, in the main program we used the Arithmetic module with default import ( add and subtract ) and on-demand import ( multiply and divide ).
http://www.thegeekstuff.com/2010/06/perl-exporter-examples/
perl的package和module的更多相关文章
- Go中的Package和Module分析
Package 所谓package(包)其实就是代码的一种组织管理方式,代码多了就需要放入文件,文件多了就需要归类放入文件夹,就好比我们在给电脑装软件时会进行归类安装,其实也是有意无意对电脑软件安装的 ...
- perl学习之:package and module
perl的包(package)和模块(PM) ==================================包package=========================== pac ...
- Python package和module
package,即包,可以把功能相近的module(模块)组织在一起,以便更好地管理.Java中也有包的概念,作用类似,是为了更好地管理类和接口.package,说白了就是个目录,不过这个目录下一定要 ...
- python里面的project、package、module分别是什么
2020/5/25 1.project(项目) project 即项目,是一个很大的文件夹,里面有好多的 .py 文件. 在Spyder 中点击菜单栏 projects -----> new ...
- lua module package.seeall选项
module 与 package.seeall http://blog.codingnow.com/2006/02/lua_51_module.html 使用 module("test&qu ...
- perl install module as non-root user
install to local directory. 1. cpan 初始化,不用local::lib,mannual就行,其他auto2. 修改cpan 配置文件 cpan > o conf ...
- Module, Package in Python
1.To put it simple, Module是写好的一系列函数或变量,文件以.py为后缀,可以在其他Module中整体或部分引用. PS: 在Module中[结尾或开头]加入if __name ...
- Lua 学习之基础篇七<Lua Module,Package介绍>
Lua 之Module介绍 包管理库提供了从 Lua 中加载模块的基础库. 只有一个导出函数直接放在全局环境中: [require]. 所有其它的部分都导出在表 package 中. require ...
- python 包(package)和模块(module)的创建和引入(import)
python 包(package)和模块(module)的创建和引入(import) 名词解释 实际上,Python中的函数(Function).类(Class).模块(Module).包库(Pack ...
随机推荐
- 【转】Python BeautifulSoup 中文乱码解决方法
这篇文章主要介绍了Python BeautifulSoup中文乱码问题的2种解决方法,需要的朋友可以参考下 解决方法一: 使用python的BeautifulSoup来抓取网页然后输出网页标题,但是输 ...
- 在家用机上搭建 Git https 服务器
今天主要叙述在家里台式机的虚拟机上搭建支持 https 的 ubuntu git 服务器. 实际上,从一个用户请求家里 git 服务器代码,最终完成代码的传输,主要是通过以下的过程: 首先,从外界寻找 ...
- 基于Bootstrap的炫酷jQuery slider插件
简要教程 这是一款在原生bootstrap slider的基础上制作效果非常炫酷的jQuery slider插件.该slider插件可以自定义slider的颜色.形状.透明度和tooltip等属性,美 ...
- JMS理解2
使用JMS 的应用程序被称为JMS 客户端,处理消息路由与传递的消息系统被称为JMS Provider,而JMS 应用则是由多个JMS 客户端和一个JMS Provider 构成的业务系统.发送消息的 ...
- 浙大pat 1059 题解
1059. Prime Factors (25) 时间限制 50 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard 作者 HE, Qinming Given ...
- ebtables使用的协议
ebtables的参数中: -p:指明使用的协议类型,ipv4,arp等可选(使用时必选)详情见/etc/ethertypes --ip-proto:IP包的类型,1为ICMP包,6为TCP包,17为 ...
- NYOJ-71 独木舟上的旅行 (贪心)
独木舟上的旅行 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 进行一次独木舟的旅行活动,独木舟可以在港口租到,并且之间没有区别.一条独木舟最多只能乘坐两个人,且乘客 ...
- uilabel 复制
//添加一个长按响应方法 - (void)addLongPressGestureRecognizer { UILongPressGestureRecognizer * longPress = [[UI ...
- linux nfs开启
nfs设置: NFS的配置过程很简单.在服务器端中编辑/etc/exports文件,添加如下内容: /home/cotton/data/cotton/zghy 192.168.2.*(rw,s ...
- 工作线程基类TaskSvc
工作线程基类TaskSvc 前端时间用ACE写代码,发ACE_Task确实好用.不但能提供数量一定的线程,还能够让这些继承的线程函数自由访问子类的private和protected变量.此外,ACE_ ...