【25】Perl子程序
image.pngPerl子程序的基本概念
image.png
image.png
image.png
image.png
image.png
image.png
@_后面修改后值也会变
【26】Perl子程序的调用
image.pngname和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.pngimage.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
网友评论