Exporter - 实现默认的导入方法用于模块
Exporter - 实现默认的导入方法用于模块 简介: In module YourModule.pm: package YourModule;
require Exporter;
@ISA = qw(Exporter);
@EXPORT_OK = qw(munge frobnicate); # symbols to export on request 导出的符号 Vsftp:/root/perl/7# cat scan1.pm
package scan1;
require Exporter;
@ISA = qw(Exporter);
@EXPORT_OK = qw(fun1 frobnicate); ###导出fun1函数
sub fun1() {
my $a=shift;
my $b=shift;
return 67 + $a + $b;
};
Vsftp:/root/perl/7# cat a7.pl
unshift(@INC,"/root/perl/7");
use scan1 qw(fun1);
my $var=&fun1(3,4);
print $var;
print "\n";
Vsftp:/root/perl/7# perl a7.pl
74 package YourModule;
use Exporter 'import'; # gives you Exporter's import() method directly
@EXPORT_OK = qw(munge frobnicate); # symbols to export on request Vsftp:/root/perl/7# cat scan02.pm
package scan02;
use Exporter 'import'; # gives you Exporter's import() method directly
@EXPORT_OK = qw(fun2 frobnicate); # symbols to export on reques
sub fun2() {
my $a=shift;
return $a -2;
};
1;
Vsftp:/root/perl/7# cat a8.pl
unshift(@INC,"/root/perl/7");
use scan02 qw(fun2);
my $var=&fun2(10);
print $var;
print "\n";
Vsftp:/root/perl/7# perl a8.pl
8 描述: Exporter 模块实现一个简单的方法 允许一个模块来导出函数和变量到它用户的名字空间。 很多模块使用Exporter 而不是实现他们自己的导入方法 因为Exporter提供了 一个 高度灵活的接口. Perl 自动调用import 方法 当处理一个使用的声明对于一个模块, 模块使用时在perlfunc and perlmod中说明。 了解模块的内容和如何使用语句 是重要的对于了解Exporter 如何Export 数组 @EXPORT and @EXPORT_OK 在一个模块里持有符号的列表,准备导出到用户的名字空间默认情况下, 或者它们可以请求被导出,分别的。 符号可以代表函数,标量,数组,hashes 或者符号表。 符号必须是全名 ,函数前的&是可选的 @EXPORT = qw(afunc $scalar @array); # afunc is a function
@EXPORT_OK = qw(&bfunc %hash *typeglob); # explicit prefix on &bfunc 如果你只是希望导出函数名字 推荐省略&,这种方式是更快的 选择需要导出的 不要导出方法名字! 不要导出任何除非是默认的 Exports 污染模块用户的名字空间, 如果你必须export 尝试使用@EXPORT_OK优先于@EXPORT 避免短的或者公用的符号名字来创建名字冲突的风险 通常 任何不被导出是访问可以从模块外部访问 使用YourModule::item_name (or $blessed_ref->method) Vsftp:/root/perl/7# cat scan02.pm
package scan02;
sub fun2() {
my $a=shift;
return $a -2;
};
1;
Vsftp:/root/perl/7# cat a9.pl
unshift(@INC,"/root/perl/7");
use scan02 ;
my $var=&scan02::fun2(10);
print $var;
print "\n"; Vsftp:/root/perl/7# perl a9.pl
8 按惯例 你可以使用一个下划线在名字前来表明它们是内部的 不是公用使用的 它实际是得到私有函数通过: my $subref = sub { ... };
$subref->(@args); # Call it as a function
$obj->$subref(@args); # Use it as a method 然而你可以使用它们的方法 由你来弄清楚 如何继承工作 作为一个一般性规则,如果模块是尝试被面向对象的那么export nothing. 如果它只是一个函数的集合 那么 @EXPORT_OK 任何除了使用谨慎使用@EXPORT 如何导入: 从其他文件 你希望使用你的模块 有3个基本的方式用来加载你的模块和导入他的符号: use YourModule; 这个导入所有的符号 从 YourModule's @EXPORT 到你的名字空间 use YourModule (); 这个导致Perl来加载模块但是不导入任何符号 use YourModule qw(...); 这个只导入 列出的符号通过调用者到它们的名字空间。 所有列出的符号必须在你的r @EXPORT or @EXPORT_OK, 否则一个错误发生。 高级功能; 指定导入的列表: 如果 条目的任何在一个导入的列表开始以!, : or / 那么列表是对待为一个特定的系列, 从列表添加或者删除来导入, 他们处理是从左到右的 特定的格式 [!]name This name only
[!]:DEFAULT All names in @EXPORT
[!]:tag All names in $EXPORT_TAGS{tag} anonymous array
[!]/pattern/ All names in @EXPORT and @EXPORT_OK which match 以!开始的 表明 匹配的名字应该是从列表中删除来导入。 如果第一个指定的是一个删除 他是对待为之前通过 :DEFAULT. 如果你需要导入额外的名字除了默认设置 你希望仍旧包含 :DEFAULT
Exporter - 实现默认的导入方法用于模块的更多相关文章
- Python全栈之路----常用模块学习----模块的种类和导入方法
什么是模块? 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码 ...
- import 语句用于导入从外部模块,另一个脚本等导出的函数,对象或原语。
import 语句用于导入从外部模块,另一个脚本等导出的函数,对象或原语. 注意:此功能目前无法在任何浏览器中实现.它在许多转换器中实现,例如 Traceur Compiler , Babel , R ...
- 详解Python模块导入方法
python常被昵称为胶水语言,它能很轻松的把用其他语言制作的各种模块(尤其是C/C++)轻松联结在一起.python包含子目录中的模块方法比较简单,关键是能够在sys.path里面找到通向模块文件的 ...
- Python3 第五周大纲(模块,导入方法、import本质,导入优化,模块的分类)
1.定义: 模块:逻辑上组织python代码(变量.函数.类.逻辑:实现一个功能,本质是.py结尾的文件) 2.导入方法 import module_name,module_name2,...... ...
- appium导入哪些java模块
简单介绍 讲解一个appium测试脚本需要导入哪些java模块. 导入的java模块 明确两点信息: 一个脚本需要讲清楚测试环境:1.自动化平台方面,测试的平台是什么(appium或者selendro ...
- 模块的四种形式、 import和from...import、 循环导入问题、模块的搜索路径、 python文件的两种用途
目录 模块的四种形式 模块 模块的四种形式 import和from...import 循环导入问题 模拟问题的发生: 解决方案 模块的搜索路径 Python文件的两种用途 模块的四种形式 Nike推荐 ...
- 接口(Interfaces)与反射(reflection) 如何利用字符串驱动不同的事件 动态地导入函数、模块
标准库内部如何实现接口的 package main import ( "fmt" "io" "net/http" "os" ...
- mysql 文件导入方法总结
数据导入3三种方法 一.phpMyAdmin 限制大小:2M 1.创建数据库 2.导入.sql或.sql.zip文件 大数据导入方法一:http://jingyan.baidu.com/article ...
- Fundebug前端JavaScript插件更新至1.6.0,新增test()方法用于测试
摘要: 1.6.0新增fundebug.test()方法用于测试,请大家及时更新. 默认情况下,Fundebug 插件能够自动捕获未处理的错误(uncaught error).另外,开发者也可以通过使 ...
随机推荐
- 4柱汉诺塔(zz)
多柱汉诺塔可以用Frame–Stewart算法来解决. The Frame–Stewart algorithm, giving a presumably optimal solution for fo ...
- (转) ASP.NET反射
原文:http://www.cnblogs.com/zizo/p/3509895.html 两个现实中的例子:1.B超:大家体检的时候大概都做过B超吧,B超可以透过肚皮探测到你内脏的生理情况.这是如何 ...
- word ppt excel文档转换成pdf
1.把word文档转换成pdf (1).添加引用 using Microsoft.Office.Interop.Word; 添加引用 (2).转换方法 /// <summary> /// ...
- 对bigDecimal的一些探索
一般直接用简单的double等来做浮点计算可能会因为计算机的浮点运算机制出现一点问题,不符合生活中的计算常识,于是java就给我们包装了大数据类,bigdecimal用于处理浮点数据类.当然也有处理整 ...
- silverlight圆球滚动
经大神启发后,才知道设置几个变量尤其是bool类型的方向,之后就是简单的判断了. // 当用户导航到此页面时执行. protected override void OnNavigatedTo(Navi ...
- EDMX更新实体后出现键值映射问题
近期做项目的EF改版时,在DB(ORACLE)中的表里添加一个新的PK,去除原有的PK. 在DB已添加完成操作,但这时在EDMX里进行从DB更新到EF里,更新完成后就发生如下错误提示: Error 6 ...
- iOS支付宝集成步骤;王刚韧的技术博客
- html-----009
</head> <!-- 通过使用框架,你可以在同一个浏览器窗口中显示不止一个页面. <p> 垂直框架</p> 本例演示:如何使用三份不同的文档制作一个垂直框 ...
- JavaScript学习笔记 -- ES6学习(三) 变量的解构赋值
1.解构赋值的定义 在ES6中,允许按照一定模式,从数组和对象中提取值(所谓解构),然后对变量进行赋值. var a = 1; var b = 2; var c = 3; //等价于 var [a, ...
- rownum
rownum是一个伪列,oracle数据库会对查找到的数据 从1 开始递增指定每行的rownum值, 当查询条件里有 rownum时(比如 where rownum>2),数据库会依次从数据集里 ...