Perl的子程序和一般意义上的函数还是有一些区别的……本文作为前面一篇讲子程序的文章的后续,主要来谈谈Perl子程序的使用细节
子程序易错点总结
子程序中的变量作用域是全局的,除非声明为my 否则和外面的变量没有区别
子程序中的@_ 数组接受来自参数的输入这是一个浅拷贝(按位拷贝)的过程
其它在子程序的产生的变量如果拷贝自@_ 即使是数组也都是深拷贝(按值拷贝)
传入参数会变为列表形式,@_[0]、@_[1]... 中分别存放该列表对应位置参数
可以用@_[index] 来改变传入的参数本身,但是不能直接用列表赋值来改变传入的参数本身
@_ 前隐式声明为my ,在子程序每次被调用时会产生一个新的@_
子程序和外面是两个不同的命名空间
虽然说子程序中的变量是全局的,但是必须在子程序被调用后其内部的变量才能对外可见(否则 ‘undef’)
可以为你的子程序指定return 值,但是灵活的Perl允许没有变量接受这个返回值(虽然不推荐);另外,如果子程序的最后一句是一个变量或表达式,会默认该变量或表达式为返回值(也可以像return 值那样使用)
|
请发表评论