zoukankan      html  css  js  c++  java
  • Perl子程序引用和匿名子程序

    子程序也有引用,也有匿名子程序。假设你已经具备了数组、hash的引用知识,所以这里简单介绍一下。

    $ref_sub = &mysub;      # 子程序引用,&符号必须不能少
    &{$ref_sub}(ARGS)        # 解除子程序引用,传递参数ARGS
    &$ref_sub(ARGS)          # 解除子程序引用
    $ref_sub->(ARGS)         # 解除子程序引用
    $ref_sub->()             # 传递空参数
    
    sub {...};               # 定义匿名子程序,sub后面没有名称
    $ref_sub = sub {...};    # 匿名子程序的引用
    

    有了子程序引用,就可以按需调用子程序。

    例如:

    sub java_learn {
        print "Learning Java now
    ";
    }
    sub perl_learn {
        print "Learning Perl now
    ";
    }
    sub python_learn {
        print "Learing Python now
    ";
    }
    
    %sub_hash=(
        "javaer"   => &java_learn,
        "perler"   => &perl_learn,
        "pythoner" => &python_learn,
    );
    
    while(my ($who,$sub)=each %sub_hash){
        print "$who is learning
    ";
        $sub->();
    }
    

    改成匿名子程序:

    $javaer = sub {
        print "Learning Java now
    ";
    };
    $perler = sub {
        print "Learning Perl now
    ";
    };
    $pythoner = sub {
        print "Learing Python now
    ";
    };
    
    foreach (qw(javaer perler pythoner)){
        print "$_ is learning
    ";
        $$_->();
    }
    

    甚至,将匿名子程序作为数据结构的一部分:

    %sub_hash = (
        "javaer" => sub {
            print "Learning Java now
    ";
        },
        "perler" => sub {
            print "Learning Perl now
    ";
        },
        "pythoner" => sub {
            print "Learning Python now
    ";
        },
    );
    
    while( my($who,$sub)=each %sub_hash ){
        print "$who is learning
    ";
        $sub->();
    }
    

    很多时候可能希望子程序的执行结果内插到双引号中,这时可以采用技巧"some string @{ [ mysub(arg1,arg2) ] } some string"的方式,将mysub的执行结果放进两端"some string"的中间。这是通过构建匿名列表,然后解除匿名数组实现的,因为数组是可以内插在双引号中的。

    子程序引用、匿名子程序的最大作用可能是用于回调函数(callback)、闭包(closure)。这个话题有点大,见下一篇文章。

  • 相关阅读:
    浅谈Java并发编程系列(八)—— LockSupport原理剖析
    mac上安装MongoDB
    在Mac上搭建Python虚拟环境
    Django项目上传到AWS服务器上
    Django部署
    Getting Started with Django Rest Framework and AngularJS
    Tutorial 7: Schemas & client libraries
    Tutorial 6: ViewSets & Routers
    Tutorial 5: Relationships & Hyperlinked APIs
    Tutorial 4: Authentication & Permissions
  • 原文地址:https://www.cnblogs.com/f-ck-need-u/p/9733283.html
Copyright © 2011-2022 走看看