• 使用模块


    11.1 使用模块
    
    模块有两种风格:传统的和面向对象的。传统模块为调用者的输入和使用定义了子过程和 变量。面向对象的模块的
    
    运转类似类声明并且是通过方法调用来访问的,在第十二章, 对象,里描述。有些模块有上面两种类型的东西。
    
    因此 如果你的模块的名字是 Red::Blue::Green,Perl 就会把它看作Red/Blue/Green.pm。
    
    
    [root@wx03 test]# cat t1.pl 
    unshift(@INC,"/root/test"); 
    require Red::Blue;
    use Exporter;
    print $Red::Blue::var;
    print "
    ";
    print @INC;
    print "
    ";
    [root@wx03 test]# perl t1.pl 
    31313
    /root/test/usr/local/perl/lib/site_perl/5.22.1/x86_64-
    
    linux/usr/local/perl/lib/site_perl/5.22.1/usr/local/perl/lib/5.22.1/x86_64-linux/usr/local/perl/lib/5.22.1.
    
    Perl 将在 @INC 数组里面列出的每一个目录里面查找模块。
    
    
    
    11.2.1 模块私有和输出器
    
    
    Exporter - Implements default import method for modules  实现的默认的模块导入方法:
    
    描述:
    
    Exporter 模块实现一个导入方法 允许一个模块来导出函数和变量到用户的名字空间。
    
    很多模块使用Exporter 相比实现它们自己的导入方法 因为Exporter 提供了一个高度灵活的接口,
    
    实现优化的公用的情况。
    
    
    Perl 会自动的import 方法 当处理一个use 语句 对于一个模块。 Modules使用是记录在perldunc和perlmod 
    
    How to Export  如何导出:
    
    
    数组  @EXPORT 和@EXPORT_OK 是一个模块 持有符号表的列表, 被导出到用户的名字空间,
    
    
    
    它们可以请求被导出, 分别的。 符号表可以代表功能,标量,数组,hash和类型团。
    
    符号表必须是给全名
    
    
    @EXPORT    = qw(afunc $scalar @array);   # afunc is a function
    
    @EXPORT_OK = qw(&bfunc %hash *typeglob); # explicit prefix on &bfunc
    
    
    数组@EXPORT和@EXPORT_OK 在模块里持有符号表的列表,被导出到用户的名字.
    
    
    如果你只导出函数名字 推荐省略&记号, 这样会更快
    
    Selecting What to Export
    
    不要导出方法名字:
    
    
    Exports 污染 模块用户的名字空间, 如果你必须export 尝试使用@EXPORT_OK
    
    有限于 @EXPORT 避免短下的或者相同的符号名字来降低名字冲突的风险
    
    
    通常任何不被导出的仍旧可以方位从外部访问这个模块使用 YourModule::item_name
    
    (或者 $blessed_ref->method) syntax.
    
    
    通过转换 你可以使用一个前导下划线来非正式的表明 它们是内部的, 不是公用的。
    
    
    实际上可能得到私有的函数通过:
    
      my $subref = sub { ... };
      $subref->(@args);            # Call it as a function
      $obj->$subref(@args);        # Use it as a method
    
    
    
    然而 如果使用它们用于方法 , 让你明白如何使用继承工作
    
    
    作为一个规则, 如果模块 是尝试面向对象的那么什么也不会导出。
    
    它只是 函数的收集然后 @EXPORT_OK 任何但是使用@EXPORT 
    
    
    对于函数和方法命名使用barewords 在优先的 前缀命名 
    
    How to Import 如何导入:
    
    
    在其他文件 你希望使用摩卡  这里有3种基本的方式 来加载模块和导入它的符号表:
    
    use YourModule;
    
    导入所有的符号表 在你的模块的@EXPORT 到你的名字空间
    
    use YourModule ();
    
    这个会导致perl加载你的模块但是不导入任何的符号表
    
    use YourModule qw(...);
    
    
    这个只会导入 列出的符号表到名字空间
    
    
    所有列出的 符号表必须在你的@EXPORT or @EXPORT_OK
    
    否则一个错误发生。
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

  • 相关阅读:
    iOS开发——Xcode快捷键
    iOS开发——国际化支持Localizable.strings
    SQL 函数
    常用窗体表单布局
    Extjs grid combo
    怎么完全卸载sql2005?
    ExtJS文件上传
    ExtJS视频学习笔记
    ExtJS问题集——Menu的show()和showBy()函数是什么意思
    C# DataGridView操作
  • 原文地址:https://www.cnblogs.com/zhaoyangjian724/p/6200039.html
Copyright © 2020-2023  润新知