zoukankan      html  css  js  c++  java
  • [ZZ][Perl] Export and Export_OK

    Export allows to export the functions and variables of modules to user’s namespace using the standard import method. This way, we don’t need to create the objects for the modules to access it’s members.

    @EXPORT and @EXPORT_OK are the two main variables used during export operation.

    @EXPORT contains list of symbols (subroutines and variables) of the module to be exported into the caller namespace.

    @EXPORT_OK does export of symbols on demand basis.

    Sample program

    Let us use the following sample program to understand Perl exporter

    
    
    package Arithmetic;
    
    use Exporter;
    
    # base class of this(Arithmetic) module
    @ISA = qw(Exporter);
    
    # Exporting the add and subtract routine
    @EXPORT = qw(add subtract);
    # Exporting the multiply and divide  routine on demand basis.
    @EXPORT_OK = qw(multiply divide);
    
    sub add
    {
    my ($no1,$no2) = @_;
    my $result;
    $result = $no1+$no2;
    return $result;
    }
    
    sub subtract
    {
    my ($no1,$no2) = @_;
    my $result;
    $result = $no1-$no2;
    return $result;
    
    }
    
    sub multiply
    {
    my ($no1,$no2) = @_;
    my $result;
    $result = $no1*$no2;
    return $result;
    }
    
    sub divide
    {
    my ($no1,$no2) = @_;
    my $result;
    $result = $no1/$no2;
    return $result;
    
    }

    In the above example, we defined the arithmetic module with four functions. By default add() and subtract() functions are exported to the user’s/caller’s namespace.

    “use Arithmetic” statement imports the subroutines from Arithmetic module that are exported by default.

    “use Arithmetic qw(multiply divide)” indicates that these two routines gets exported only when it is specifically requested as shown in the following code snippet.

    #! /usr/bin/perl
    
    use strict;
    use warnings;
    
    use Arithmetic;
    use Arithmetic qw(multiply divide);
    
    print add(1,2),"
    ";
    print multiply(1,2),"
    ";

    As we seen above, in the main program we used the Arithmetic module with default import ( add and subtract ) and on-demand import ( multiply and divide ).

    How Imports Gets Done

    Without Exporter, to import functions from Arithmetic module into the main package, we can write a code-snippet like the following to import some of the functions.

    sub import {
    no strict 'refs';
    for (qw(add subtract multiply )) {
    *{"main::$_"} = &$_;
    }
    }

    The code in the main package/program are as follows,

    #!/usr/bin/perl
    use Arithmetic;
    # import() subroutine in Arithmetic module gets invoked automatically.
    print add(1,2);

    In the above code-snippet, from the current package ( Arithmetic ), these routines ( add, subtract, multiply ) gets imported into the main package. This provides limited functionality. i.e In case if the use is invoked from packages other than main, this wont work properly. But in the Perl Exporter module, we don’t have this limitation.

    http://www.thegeekstuff.com/2010/06/perl-exporter-examples/

  • 相关阅读:
    移动端 line-height 不垂直居中问题
    CSS属性: 阴影 轮廓 渐变
    子div设置float后会导致父div无法自动撑开
    表格 滚动条 (tbody部分滚动)
    域控下发脚本,安装zabbix客户端
    cannot import name 'path' from django.urls
    添加私有yum库
    深夜感慨
    统计windows文件夹下文件大小(python脚本和powershell脚本)
    nginx日志切割
  • 原文地址:https://www.cnblogs.com/sanquanfeng/p/3370515.html
Copyright © 2011-2022 走看看