1、定义子程序使用关键字sub即可,如下图所示。而调用子程序用&符号即可调用。
2、所有的子程序都有返回值,我到目前为止还没见过哪门计算机语言的子程序没有返回值一说,所以perl也有的。但是perl的子程序如何进行返回呢?和C语言不通,C语言是通过return进行返回,而perl对其简化了(但并不是说perl语言没有return,后面会说),直接把子程序的最后一个被执行的语句的运算结果当成子程序的返回值。看,如果直接把print作为最后一条语句,那么返回值是1,表示成功输出了。
3、另外,在第二点我指出,是最后一个被执行的语句,而不是最后一行代码。如下图所示代码,最后一行代码是2;但最后一行被执行的代码是3,结果就是3.
4、子程序是可以传入参的。还是那句话,现在没见过哪门语言的函数无法传参的。但是perl的子程序对参数的处理很奇怪。比如C,可能会有void max(int a,int b)类似于这种写法,告诉你我有2个形参这样子,但perl没有。反正我到现在都感觉蛮别扭的。如下图所示,子程序的定义没有任何区别,但是在函数体内,出现了$_[0]这种东西。@_这个东西是数组变量,我们可以用$_[0]来引用第一个参数,以此类推。
5、我们来看一下如下图所示的代码。哇塞,什么情况,$name明明是在子程序中定义的,但是我在子程序外竟然也可以访问!好吧,在C\C++\java这种语言中是不会存在这种状况的,但perl就偏偏可以。所以的变量都是全局变量!
6、那么,perl难道就不可以有私有变量么?答案是可以的,perl一样可以创建私有变量,只在子程序内部生效,在子程序外部是没有任何意义的,那就要借助my操作符。如下图所示,在子程序内部创建了2个私有变量$h,$o,在内部访问时OK的,在外部访问并没有任何值。
7、再看如下图所示,程序外也有2个同名的变量,但子程序外和内完全互不干扰。
8、那如果想在执行程序一半的时候想结束执行并返回结果怎么办?perl一样支持return