zoukankan      html  css  js  c++  java
  • perl EXPORT模块

    Exporter - Implements default import method for modules 实现模块的默认导出方法:
    
    简介:
    
    [tomcat@wx03 ~]$ cat hui.pm 
    package hui;
      require Exporter;
      @ISA = qw(Exporter);
      @EXPORT_OK = qw(munge $frobnicate);  # symbols to export on request
    
    sub munge {
     return 9999};
    our $frobnicate="dad444ff";
    1;
    [tomcat@wx03 ~]$ cat a6.pl 
    use hui qw(munge $frobnicate);;
    my $var=&munge ;
    print $var."
    ";
    print $frobnicate."
    ";
    [tomcat@wx03 ~]$ perl a6.pl 
    9999
    dad444ff
    
    或者;
    [tomcat@wx03 ~]$ cat cai.pm 
     package cai;
      use Exporter 'import'; # gives you Exporter's import() method directly
      @EXPORT_OK = qw(munge $frobnicate);  # symbols to export on request
    sub munge {
     return 9999};
    our $frobnicate="dad444ff";
    1;
    [tomcat@wx03 ~]$ 
    [tomcat@wx03 ~]$ cat a6.pl 
    use cai qw(munge $frobnicate);;
    my $var=&munge ;
    print $var."
    ";
    print $frobnicate."
    ";
    [tomcat@wx03 ~]$ perl a6.pl 
    9999
    dad444ff
    
    
    在另外的文件 你希望使用你的模块:
    
    use YourModule qw(frobnicate);      # import listed symbols
    
    frobnicate ($left, $right)          # calls YourModule::frobnicate
    
    
    DESCRIPTION :
    
    Exporter 模块实现一个导入方法 允许一个模块导出函数和变量到用户的名字空间。
    
    很多模块使用Exporter 而不是实现它们自己的导入方法
    
    因为Exporter 提供了一个高度灵活的接口,一个实施优化的用于共同的情况下。
    
    
    Perl 自动的调用导入当处理一个use语句用于一个模块。
    
    模块和使用时记录在perlfunc和perlmod.
    
    How to 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
    
    如果你只要导出函数名字 ,推荐省略&符号, 这种方式速度更快。
    
    Selecting What to Export
    
    不要导出方法名字
    
    默认没有一个很多的理由不导出任何东西
    
    Exports 污染模块使用者的名字空间,如果你必须导出尝试使用@EXPORT_OK
    
    优先于@EXPORT,避免短的或者相同的符号名字来降低名字冲突的风险。
    
    通常没有导出任何但是仍旧可以访问从模块外部使用  YourModule::item_name 
    
    或者 对象方法 $blessed_ref->method
    
    它实际上市可以的,以获取私有函数;
    my $subref = sub { ... };
      $subref->(@args);            # Call it as a function
      $obj->$subref(@args);        # Use it as a method
    
    
    然而,如果你使用它们用于方法,这取决于你如何继承使用
    
    作为一个一般规则, 如果模块尝试是面向对象的那么什么也不会导出。
    
    如果只是一个函数集,那么 @EXPORT_OK 任何但是use @EXPORT
    
    
    How to Import 如何导入:
    
    在另外的文件你希望使用你的模块,这里有3种方式来加载你的模块和导入符号表:
    
    use YourModule;
    
    这个导入所有的符号从YourModule's @EXPORT到你的名字空间 
    
    use YourModule ();  
    
    这个导致perl 加载你的模块但是不导入任何符号表
    
    use YourModule qw(...);
    
    
    这个导入只是符号表列出在qw里的 到你的名字空间,
    
    所有的列出的符号表必须在你的@EXPORT or @EXPORT_OK
    
    否则错误发生。
    
    除非你想要使用它的高级特性,这可能是你需要知道的 use Exporter
    
    高级功能:
    
    指定导入列表:
    
    如果任何在导入的列表里的条目以!,:或者/开始 那么列表被处理为一系列的规范
    
    可以增加或者删除从导入列表里,它们从左到右处理
    
    [!]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
    	
    	一个leading ! 表示匹配的名字应该被删除从导入的列表里.
    	
    如果第一个指定的是一个删除被看作通过	
    
    
    e.g., Module.pm defines: 模块定义:
    
     @EXPORT      = qw(A1 A2 A3 A4 A5);
        @EXPORT_OK   = qw(B1 B2 B3 B4 B5);
        %EXPORT_TAGS = (T1 => [qw(A1 A2 B1 B2)], T2 => [qw(A1 A2 B3 B4)]);
    
    现在你不能使用tags 在@EXPORT or @EXPORT_OK.
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

  • 相关阅读:
    三元表达式、列表推导式、生成器表达式、递归、匿名函数
    nonlocal关键字、装饰器
    函数嵌套、作用域、闭包
    实参和形参
    函数基础
    文件操作
    字符编码
    推荐一个纯JavaScript编写的图表库——Highcharts
    推荐web 前端代码的编辑分享平台——RunJS
    了解腾讯
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13350747.html
Copyright © 2011-2022 走看看