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.
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

  • 相关阅读:
    Django对静态文件的处理——部署阶段
    使用Django来处理对于静态文件的请求
    Django1.7如何配置静态资源访问
    Spring WebSocket中403错误解决
    FastJSON JSONObject 字段排序 Feature.OrderedField
    国际化(i18n) 各国语言缩写
    【转】java.io.Closeable接口
    【转】spring bean 卸载
    This content should also be served over HTTPS
    Failed to close the ServletOutputStream connection cleanly, Broken pipe
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13350747.html
Copyright © 2011-2022 走看看