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).另外,开发者也可以通过使 ...
随机推荐
- ASP.NET MVC Identity 添加角色
using Microsoft.AspNet.Identity; public ActionResult AddRole(String name){ using (var roleManager = ...
- JQ动画事件
1.会飞的li html: <ul id="ulL"> <li>中国</li> <li>美国</li> <li&g ...
- 20160329javaweb之JSP -cookie入门
一.什么是会话? •会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 会话过程中要解决的一些问题? •每个用户在使用浏览器与服务器 ...
- 20151225jquery学习笔记---编辑器插件
编辑器(Editor),一般用于类似于 word 一样的文本编辑器,只不过是编辑为 HTML格式的.分类纯 JS 类型的,还有 jQuery 插件类型的.一. 编辑器简介我们使用的 jQuery 版本 ...
- 20151215jqueryUI--dialog代码备份
$(function () { $('#search_button').button(); /*$('#reg_a').click(function() { $('#reg').dialog(); } ...
- Android开发之Menu组件
菜单Menu大致分为三种类型:选项菜单(OptionsMenu),上下文菜单(ContextMenu),子菜单(SubMenu). 1.选项菜单 在一个Activity界面中点击手机Menu键,在屏幕 ...
- 修改sqlplus提示符
如图所示 : 修改 提示符为 username(sid_serial#)@instance_name ,这样其实很方便的 以下是步骤 在11g中glogin.sql 文件是不存在的,取而代之的是 lo ...
- javascript 基础2第12节
1. <html> <head> <title>javascript基础</title> </head> <body> 1.Nu ...
- java连接远程服务器之manyged-ssh2 (windows和linux)
一.所需要的jar包 需要借助Ganymed SSH的jar包: ganymed-ssh2-262.jar 下载地址: http://www.ganymed.ethz.ch/ssh2/ API详情: ...
- foreach的一点理解
首先什么样的数据才能实现foreach 1 实现IEnumerable这个接口 2 有GetEnumerable()这个方法 然后为啥实现这个接口或者有这个方法就可以实现foreach遍历 首先我先用 ...