美文网首页
perl听课笔记05【P25-P28】

perl听课笔记05【P25-P28】

作者: 医只蜗牛 | 来源:发表于2021-07-21 08:57 被阅读0次

    书接上文:https://www.jianshu.com/p/680bbae5db67

    【25】Perl子程序

    image.png

    Perl子程序的基本概念


    image.png
    image.png
    image.png
    image.png
    image.png
    image.png
    @_后面修改后值也会变

    【26】Perl子程序的调用

    image.png
    name和list中间有空格
    image.png
    调用两次
    image.png

    这是个先调用后定义的例子。
    下一个例子:


    image.png
    image.png
    image.png
    image.png
    image.png
    image.png
    image.png
    image.png
    image.png
    定义在调用后面,函数报错
    image.png
    image.png
    image.png
    少见
    image.png
    image.png
    image.png
    image.png
    image.png
    image.png

    add中,最后一行是括号,因此为空值
    add_A:最后一行是 var+1
    add-B 有有一个return。打印此部分,后面的部分就省略了


    image.png
    等号前后的个数得一致
    image.png
    前后没有改变,之前是1,2,3;赋值计算后仍然是1,2,3
    改变函数顺序,看结果情况
    image.png
    前后变化,值也随之变化
    跟前面一样,唯一不同的是这里是地址
    image.png
    这说明地址也可传递
    image.png
    image.png
    image.png
    @array = @_ 【array的值被传递,@_代表数组的值】
    image.png
    image.png
    image.png
    这里:test1,test2会被合并成一个,然后传递。
    子程序赋值时候,合并成一个的传递给array1,而array为空
    数组和标量传递不同之处
    传入一个标量和数组
    image.png
    peal中,传递一个标量和数组的话,用一个标量和数组来接收的话,是没有问题的。
    不会合并

    【27】Perl子程序和局部变量

    image.png
    image.png

    my变量在所处的BLOCK是可见的,对于他下一级的子函数和上一级的my变量是看不到的。而local变量在他上面是看不到的,下一级的子函数啥的是可见的


    这里number1可以看到,number2看不到
    这里需要注意:接收参数之前,num1和num2是什么?

    接收之后,num1和num2改变了,改变后是否会影响主程序中的num1和num2的值。


    image.png
    用my来定义num1和num2
    但需要注意的是,my定义的num1和num2和前面不一样。
    和这里的不一样
    是没有任何关系的。
    我们重新找了一个内存空间,将num1和num2存储进去。跟前面的没关系。只是名字相同,原来的num1和num2仍然存在,只不过后面不会用到了。因为后面的num1和num2都是my新定义的了

    跳出来之后,num1还是原来主程序里的num1,而原来主程序里的num2看不到,所以是my定义的num2

    my定义了一个局部变量,就算和全局变量重名的话,也不会对全局变量产生影响。

    子程序里面定义的变量优先,首先考虑(my)他最先定义的变量。


    image.png

    这里定义全局变量,所以后面num1会改变


    image.png
    local定义的变量,在子程序可以看的到。如果不新定义一个同名变量的话,所有更改都会影响到主程序里面的值。
    my变量不会收到子程序的影响。

    参数传递传递进去的变量,不会在子程序里面受到影响。
    我们通过参数传递传递进去的变量,不会对标量和变量造成任何影响。我们默认是通过值传递的方式来默认调用的。仅仅是一个值赋值的过程。

    非常关键,且一定会用的到。

    可以清晰看到修改的地方
    image.png
    image.png

    对传入引用进行解引用。也就是引用数组。把每个元素取出来,然后加上total


    image.png
    第一个传递的是地址
    传递的是引用,对于同一个数组,引用肯定是一样的。所以都是6。100-6=94
    image.png

    主程序里面需要对数组A进行操作,且有两个子程序进行操作。
    我们可以传递操作对象的引用。不管我们怎么改变操作对象的值,在另外一个程序里面都可以拿到最新的结果。
    如果@a中有1000个值得话,参数传递也会传递1000个过去。运行效率慢。


    通过传入引用的方式,避免了赋值的操作
    用4行这种方法能否正确将这个引用接收过来??自行探讨

    【28】综合实例

    image.png

    先看主程序


    image.png
    image.png
    image.png
    image.png
    image.png
    主程序
    image.png
    image.png
    image.png

    分块,分步来实现所需要的结果。


    image.png

    相关文章

      网友评论

          本文标题:perl听课笔记05【P25-P28】

          本文链接:https://www.haomeiwen.com/subject/gcmlmltx.html