zoukankan      html  css  js  c++  java
  • Perl之my与local

    版权声明:本文为博主原创文章,未经博主同意不得转载。

    https://blog.csdn.net/sunshoupo211/article/details/31745909

       在函数定义中,使用mykeyword来确保用户定义函数中所使用的变量名不与不论什么其他同名的全局变量冲突,它使其后面的变量成为通常语言所谓的local变量。缺省情况下,perl函数中的变量是全局变量。 local变量先save再store.

    例如以下例:

    $x = 9;
    sub mm{
        print "$x
    ";
    }
    sub gg_my{
        my $x = 11;
        print "call-my $x
    ";
        mm;
    }
    sub gg_local {
        local $x = 20;
        print "call-local $x
    ";
        mm;
    }
    gg_my;
    gg_local;
    print $x;
    

    执行结果:

    call_my 11
    9
    call_local 20
    20
    9
    能够看出,local函数在创建全局变量的一个局部实例后就可以将它传递给不论什么子例程并继续进行局部初始赋值。
    运算符my以与local函数相同的方法创建一次局部实例.
    然而,由my创建的局部实例不能传递给其他子例程,传递给子例程进行运算的将是全局值而非局部引用值。
    当locla所在的子例程结束后。全局变量的值又恢复为初始定义值。

    my和local的差别

    my: lexically scoped variable
    local:Dynamically scoped variable


    内部->外部:


    (1)my和local都仅仅在一个block里有效,出去就失效;
    (2)可是local的变量能够继续在这个block中调用的子程序中存在;
    (3)假设有与外界同名的变量。两者在block退出后都不影响外界同名变量;


    外部->内部:


    (1)外部设置my、local、缺省均队内有效,可是同名变量外部my。在block内部local是不同意的。由于二者在block中调用的子程序中均有效,会冲突。


    (2)假设在一个block中有一个my修饰的变量和外界的一个变量同名,并且又须要在这个block中使用外界变量时。两个办法:
    第一个办法,用main的package修饰这个变量名。$main::global
    第二个办法,用our修饰。our $global,那么该block中接下来出现的全部$global都是外界的global


    (3)编写脚本时,注意作用域,防止外部影响内部。

    

  • 相关阅读:
    SharePoint 2013 图文开发系列之自定义字段
    SharePoint 2013 图文开发系列之Visual Studio 创建母版页
    SharePoint 2013 图文开发系列之代码定义列表
    SharePoint 2013 图文开发系列之计时器任务
    SharePoint 2013 图文开发系列之应用程序页
    SharePoint 2013 图文开发系列之事件接收器
    SharePoint 2013 图文开发系列之可视化WebPart
    SharePoint 2013 图文开发系列之WebPart
    SharePoint 2013 对二进制大型对象(BLOB)进行爬网
    SharePoint 2013 状态机工作流之日常报销示例
  • 原文地址:https://www.cnblogs.com/mqxnongmin/p/10541562.html
Copyright © 2011-2022 走看看