1. Exporter - 实现默认的导入方法用于模块
  2.  
  3. 简介:
  4.  
  5. In module YourModule.pm:
  6.  
  7. package YourModule;
  8. require Exporter;
  9. @ISA = qw(Exporter);
  10. @EXPORT_OK = qw(munge frobnicate); # symbols to export on request 导出的符号
  11.  
  12. Vsftp:/root/perl/7# cat scan1.pm
  13. package scan1;
  14. require Exporter;
  15. @ISA = qw(Exporter);
  16. @EXPORT_OK = qw(fun1 frobnicate); ###导出fun1函数
  17. sub fun1() {
  18. my $a=shift;
  19. my $b=shift;
  20. return 67 + $a + $b;
  21. };
  22. Vsftp:/root/perl/7# cat a7.pl
  23. unshift(@INC,"/root/perl/7");
  24. use scan1 qw(fun1);
  25. my $var=&fun1(3,4);
  26. print $var;
  27. print "\n";
  28. Vsftp:/root/perl/7# perl a7.pl
  29. 74
  30.  
  31. package YourModule;
  32. use Exporter 'import'; # gives you Exporter's import() method directly
  33. @EXPORT_OK = qw(munge frobnicate); # symbols to export on request
  34.  
  35. Vsftp:/root/perl/7# cat scan02.pm
  36. package scan02;
  37. use Exporter 'import'; # gives you Exporter's import() method directly
  38. @EXPORT_OK = qw(fun2 frobnicate); # symbols to export on reques
  39. sub fun2() {
  40. my $a=shift;
  41. return $a -2;
  42. };
  43. 1;
  44. Vsftp:/root/perl/7# cat a8.pl
  45. unshift(@INC,"/root/perl/7");
  46. use scan02 qw(fun2);
  47. my $var=&fun2(10);
  48. print $var;
  49. print "\n";
  50. Vsftp:/root/perl/7# perl a8.pl
  51. 8
  52.  
  53. 描述:
  54.  
  55. Exporter 模块实现一个简单的方法 允许一个模块来导出函数和变量到它用户的名字空间。
  56.  
  57. 很多模块使用Exporter 而不是实现他们自己的导入方法
  58.  
  59. 因为Exporter提供了 一个 高度灵活的接口.
  60.  
  61. Perl 自动调用import 方法 当处理一个使用的声明对于一个模块,
  62.  
  63. 模块使用时在perlfunc and perlmod中说明。
  64.  
  65. 了解模块的内容和如何使用语句 是重要的对于了解Exporter
  66.  
  67. 如何Export
  68.  
  69. 数组 @EXPORT and @EXPORT_OK 在一个模块里持有符号的列表,准备导出到用户的名字空间默认情况下,
  70.  
  71. 或者它们可以请求被导出,分别的。
  72.  
  73. 符号可以代表函数,标量,数组,hashes 或者符号表。
  74.  
  75. 符号必须是全名 ,函数前的&是可选的
  76.  
  77. @EXPORT = qw(afunc $scalar @array); # afunc is a function
  78. @EXPORT_OK = qw(&bfunc %hash *typeglob); # explicit prefix on &bfunc
  79.  
  80. 如果你只是希望导出函数名字 推荐省略&,这种方式是更快的
  81.  
  82. 选择需要导出的
  83.  
  84. 不要导出方法名字!
  85.  
  86. 不要导出任何除非是默认的
  87.  
  88. Exports 污染模块用户的名字空间, 如果你必须export 尝试使用@EXPORT_OK优先于@EXPORT
  89.  
  90. 避免短的或者公用的符号名字来创建名字冲突的风险
  91.  
  92. 通常 任何不被导出是访问可以从模块外部访问 使用YourModule::item_name (or $blessed_ref->method)
  93.  
  94. Vsftp:/root/perl/7# cat scan02.pm
  95. package scan02;
  96. sub fun2() {
  97. my $a=shift;
  98. return $a -2;
  99. };
  100. 1;
  101. Vsftp:/root/perl/7# cat a9.pl
  102. unshift(@INC,"/root/perl/7");
  103. use scan02 ;
  104. my $var=&scan02::fun2(10);
  105. print $var;
  106. print "\n";
  107.  
  108. Vsftp:/root/perl/7# perl a9.pl
  109. 8
  110.  
  111. 按惯例 你可以使用一个下划线在名字前来表明它们是内部的 不是公用使用的
  112.  
  113. 它实际是得到私有函数通过:
  114.  
  115. my $subref = sub { ... };
  116. $subref->(@args); # Call it as a function
  117. $obj->$subref(@args); # Use it as a method
  118.  
  119. 然而你可以使用它们的方法 由你来弄清楚 如何继承工作
  120.  
  121. 作为一个一般性规则,如果模块是尝试被面向对象的那么export nothing.
  122.  
  123. 如果它只是一个函数的集合 那么 @EXPORT_OK 任何除了使用谨慎使用@EXPORT
  124.  
  125. 如何导入:
  126.  
  127. 从其他文件 你希望使用你的模块 3个基本的方式用来加载你的模块和导入他的符号:
  128.  
  129. use YourModule;
  130.  
  131. 这个导入所有的符号 YourModule's @EXPORT 到你的名字空间
  132.  
  133. use YourModule ();
  134.  
  135. 这个导致Perl来加载模块但是不导入任何符号
  136.  
  137. use YourModule qw(...);
  138.  
  139. 这个只导入 列出的符号通过调用者到它们的名字空间。
  140.  
  141. 所有列出的符号必须在你的r @EXPORT or @EXPORT_OK, 否则一个错误发生。
  142.  
  143. 高级功能;
  144.  
  145. 指定导入的列表:
  146.  
  147. 如果 条目的任何在一个导入的列表开始以!, : or / 那么列表是对待为一个特定的系列,
  148.  
  149. 从列表添加或者删除来导入, 他们处理是从左到右的 特定的格式
  150.  
  151. [!]name This name only
  152. [!]:DEFAULT All names in @EXPORT
  153. [!]:tag All names in $EXPORT_TAGS{tag} anonymous array
  154. [!]/pattern/ All names in @EXPORT and @EXPORT_OK which match
  155.  
  156. 以!开始的 表明 匹配的名字应该是从列表中删除来导入。
  157.  
  158. 如果第一个指定的是一个删除 他是对待为之前通过 :DEFAULT.
  159.  
  160. 如果你需要导入额外的名字除了默认设置 你希望仍旧包含 :DEFAULT

Exporter - 实现默认的导入方法用于模块的更多相关文章

  1. Python全栈之路----常用模块学习----模块的种类和导入方法

    什么是模块? 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码 ...

  2. import 语句用于导入从外部模块,另一个脚本等导出的函数,对象或原语。

    import 语句用于导入从外部模块,另一个脚本等导出的函数,对象或原语. 注意:此功能目前无法在任何浏览器中实现.它在许多转换器中实现,例如 Traceur Compiler , Babel , R ...

  3. 详解Python模块导入方法

    python常被昵称为胶水语言,它能很轻松的把用其他语言制作的各种模块(尤其是C/C++)轻松联结在一起.python包含子目录中的模块方法比较简单,关键是能够在sys.path里面找到通向模块文件的 ...

  4. Python3 第五周大纲(模块,导入方法、import本质,导入优化,模块的分类)

    1.定义: 模块:逻辑上组织python代码(变量.函数.类.逻辑:实现一个功能,本质是.py结尾的文件) 2.导入方法 import module_name,module_name2,...... ...

  5. appium导入哪些java模块

    简单介绍 讲解一个appium测试脚本需要导入哪些java模块. 导入的java模块 明确两点信息: 一个脚本需要讲清楚测试环境:1.自动化平台方面,测试的平台是什么(appium或者selendro ...

  6. 模块的四种形式、 import和from...import、 循环导入问题、模块的搜索路径、 python文件的两种用途

    目录 模块的四种形式 模块 模块的四种形式 import和from...import 循环导入问题 模拟问题的发生: 解决方案 模块的搜索路径 Python文件的两种用途 模块的四种形式 Nike推荐 ...

  7. 接口(Interfaces)与反射(reflection) 如何利用字符串驱动不同的事件 动态地导入函数、模块

    标准库内部如何实现接口的 package main import ( "fmt" "io" "net/http" "os" ...

  8. mysql 文件导入方法总结

    数据导入3三种方法 一.phpMyAdmin 限制大小:2M 1.创建数据库 2.导入.sql或.sql.zip文件 大数据导入方法一:http://jingyan.baidu.com/article ...

  9. Fundebug前端JavaScript插件更新至1.6.0,新增test()方法用于测试

    摘要: 1.6.0新增fundebug.test()方法用于测试,请大家及时更新. 默认情况下,Fundebug 插件能够自动捕获未处理的错误(uncaught error).另外,开发者也可以通过使 ...

随机推荐

  1. JVM内存模型以及垃圾收集策略解析

    http://xmuzyq.iteye.com/blog/599750 一 JVM内存模型 1.1 Java栈 Java栈是与每一个线程关联的,JVM在创建每一个线程的时候,会分配一定的栈空间给线程. ...

  2. android线程池ThreadPoolExecutor的理解

    android线程池ThreadPoolExecutor的理解 线程池 我自己理解看来.线程池顾名思义就是一个容器的意思,容纳的就是ThreadorRunable, 注意:每一个线程都是需要CPU分配 ...

  3. 数据库性能优化一:SQL索引一步到位

    SQL索引在数据库优化中占有一个非常大的比例, 一个好的索引的设计,可以让你的效率提高几十甚至几百倍,在这里将带你一步步揭开他的神秘面纱. 1.1 什么是索引? SQL索引有两种,聚集索引和非聚集索引 ...

  4. 产品原型设计5:移动App原型设计神器 - POP(Prototyping on Paper)

    一般来说,苦逼的互联网产品经理们都知道 Axure 这个原型设计工具,一方面是因为它提供了足够简单的拖拽操作,易上手,且有很多模板方便复用:另一方是因为它可直接输出html,直接在浏览器里给团队成员和 ...

  5. CDN调度器HAProxy、Nginx、Varnish

    http://www.ttlsa.com/web/the-cdn-scheduler-nginx-haproxy-varnish/ CDN功能如下:1.将全网IP分为若干个IP段组,分组的依据通常是运 ...

  6. android使用广播退出应用程序

    由于在(Widget或Service.BroadcastReceiver中)使用startActivity()方法启动activity时需使用FLAG_ACTIVITY_NEW_TASK flag,所 ...

  7. new Date() 倒计时

    js中单独调用new Date() 显示的结果是:Fri May 20 2015 20:00:00 GMT+0800这种格式的时间 JS获取当前时间戳的方法 JavaScript 获取当前时间戳: 第 ...

  8. javax.el.PropertyNotFoundException: Property 'aDesc' not found on type

    这个问题是是在我使用jeesite自动代码是产生的,原因是实体类的属性命名规范不合格,我在网上看到类的属性前三个字母不能出现大写 解决办法:将类的属性大小写改一下

  9. MySQL常见错误类型

    MySQL常见错误类型:1005:创建表失败1006:创建数据库失败1007:数据库已存在,创建数据库失败1008:数据库不存在,删除数据库失败1009:不能删除数据库文件导致删除数据库失败1010: ...

  10. C#实现JSON序列化与反序列化介绍

    方法一:引入System.Web.Script.Serialization命名空间使用 JavaScriptSerializer类实现简单的序列化 序列化类:Personnel public clas ...