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).另外,开发者也可以通过使 ...
随机推荐
- 关于U3D画面出现卡顿的问题
在U3D中,曾近遇到过卡顿的问题,下面说明解决方法 一:在关于相机移动的函数中,移动的函数不应该放在Update里面应该放到LateUpdate 二:如果最开始建立项目的时候选择的时候是3D游戏,如果 ...
- SignalR: The new old thing
As you can see, this is my first blog posted in cnblog. If you find any mistake, don’t hesitate to t ...
- 1066. Root of AVL Tree
An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child su ...
- Apache + Tomcat + mod_jk实现集群服务及session共享
实现效果:用apache 分发请求到tomcat中的对应的项目 原理:
- NSArray 常用的一些方法
- (NSUInteger) count; 返回数组中元素个数 - (id)objectAtIndex:(NSUInteger)index; 返回一个id类型的数组指定位置元素 - (id)lastO ...
- js生成动态日历
效果图: 看代码: <html> <head> <title>动态日历</title> <style type="text/css& ...
- 锋利的Jquery解惑系列(三)------ 各路选择器大聚会
申明:初次学习Jquery的选择器时只记得几个和css选择器类似的几个,在这里列出书上写上的各路选择器方便以后的查询和现在的学习 所有例子都来自书上 测试画面: 一.基本选择器 #id, $(&quo ...
- FBX SDK 从2012.1 到 2013.3 变化
==================================================== ============================== 译文 ...
- javascript笔记之正则表达式
1.在js正则表达式特殊的需要转义的字符有: ^ $ . * + ? = ! : | \ / ( ) [ ] { } 但实际应用中,还要根据实际情况来判断,以上字符可能不需要转义,也可能不止以上字符 ...
- web2py相关-------------------------------(一)初遇
在第一次换工作的时候,希望转行 做编程,就面试了很多家,很多人问我 懂不懂html 书写,我非常诚实的告诉他们不会. 当然那时我很天真的认为,只要自己愿意学习这些都不是问题,事实证明人的学习能力是很快 ...