• EXPORT 和EXPORT_OK


    EXPORT 
    
    实现模块的默认导入方法
    
    
    In module YourModule.pm:  
    
    
    [root@node01 perl]# cat ex1.pm 
      package ex1;
      require Exporter;
      @ISA = qw(Exporter);
      @EXPORT_OK = qw($munge frobnicate);  # symbols to export on request
      my $munge='aaaa';
    1;
    [root@node01 perl]# cat a3.pl 
    use ex1 qw($munge);;
    print $munge;
    
    [root@node01 perl]# perl a3.pl 
    [root@node01 perl]# 
    
    
    [root@node01 perl]# cat ex1.pm 
      package ex1;
      require Exporter;
      @ISA = qw(Exporter);
      @EXPORT_OK = qw($munge frobnicate);  # symbols to export on request
      $munge='aaaa';
    1;
    [root@node01 perl]# cat a3.pl 
    use ex1 qw($munge);;
    print $munge;
    
    [root@node01 perl]# perl a3.pl 
    aaaa[root@node01 perl]# 
    
    包里的变量导出 需要全局变量
    
    
    [root@node01 perl]# cat ex1.pm 
      package ex1;
      require Exporter;
      @ISA = qw(Exporter);
      @EXPORT_OK = qw($munge frobnicate);  # symbols to export on request
      $munge='aaaa';
      $a='bbbbbbbb';
      $c='cccccccc';
      sub frobnicate {
       my $a=shift;
       my $b=shift;
       return $a + $b;
    };
    1;
    [root@node01 perl]# cat a3.pl 
    use ex1 qw($munge frobnicate);;
    print $munge;
    print "
    ";
    print frobnicate(23,34);
    print "
    ";
    print $a;
    print "
    ";
    
    [root@node01 perl]# perl a3.pl 
    aaaa
    57
    
    
    描述:
    
    Exporter 模块实现一个导入方法允许一个模块来导出函数和变量到用户的名字空间。
    
    很多模块使用Exporter 相比实现它们自己的import 方法。
    
    因为Exporter 提供一个高度灵活的接口.
    
    Perl 自动 调用import 方法 当处理一个use 语句用于一个模块。
    
    模块和使用是记录在 perlfunc and perlmod.
    
    
    了解模块的内容和如何使用语句操作是重要的对于了解Exporter.
    
    如何导出:
    
    数组 @EXPORT 和@EXPORT_OK 是一个模块用于一组符号表
    
    准备被导出到用户的名字空间,或者 它们可以被请求导出,
    
    分别的。
    
    符号可以表示函数,标量,数组,hashes或者类型团。
    
    符号必须给定全名 但是函数前面的符号是可选的
    
        @EXPORT    = qw(afunc $scalar @array);   # afunc is a function
        @EXPORT_OK = qw(&bfunc %hash *typeglob); # explicit prefix on &bfunc
    
    如果你只是导出函数名字 是推荐省略符号,这样更快
    
    选择需要导出的
    
    不到导出方法名字!
    
    不要导出任何否则默认
    
    Exports  污染 模块用户的名字空间。
    
    如果你必须导出尝试使用@EXPORT_OK优先于@EXPORT 避免冲出
    
    
    
    通常 任何不被导出的仍旧可以访问从外部 使用YourModule::item_name (or $blessed_ref->method) syntax
    
    
    事实上,它是可以得到私有函数通过:
    
    如何导入:
    
    在其他文件 希望使用你的模块 有3种基本方式用于加载你的模块和导入它的符号:
    
    use YourModule;
    
    
    
    这个导入所有的符号从YourModule's @EXPORT 到你的名字空间
    
    use YourModule ();
    
    这个导致Perl来加载你的模块 但是不导入任何符号表
    
    use YourModule qw(...);
    
    这个将调用列出的符号到名字空间。所有列出的符号必须是在你的@EXPORT or @EXPORT_OK,否则一个错误发生。
    
    
    
    
    

  • 相关阅读:
    Android 网络优化,使用 HTTPDNS 优化 DNS,从原理到 OkHttp 集成
    WebView,我已经长大了,知道自己区分是否安全了!
    “崩溃了?不可能,我全 Catch 住了” | Java 异常处理
    Google 的 QUIC 华丽转身成为下一代网络协议: HTTP/3.0
    图解:HTTP 范围请求,助力断点续传、多线程下载的核心原理
    c/c++ 读入一行不确定个数的整数
    LeetCode:Length of Last Word
    LeetCode:Permutation Sequence
    机器学习:判别模型与生成模型
    LeetCode:Jump Game I II
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13349738.html
Copyright © 2020-2023  润新知