perl编程_08 函数.PDF
文本预览下载声明
下载
第8学时 函 数
几乎所有的计算机语言都支持函数。函数是一组代码,可以按名字对它进行调用,以便
执行某项工作,然后返回某个值。在本书中,你要使用许多函数,比如,你已经使用了 p r i n t 、
r e v e r s e 、s o r t 、o p e n、c l o s e和s p l i t等函数。它们都是P e r l 的内置函数。
P e r l还允许你编写自己的函数。在 Pe r l 中,用户定义的函数称为子例程。与 P e r l 的内置函
数一样,用户定义的函数也可以拥有参数,并且可以将值返回给调用者。
P e r l还支持作用域的概念。作用域用于确定某个时间内程序能够看到的一组变量。由于有
了P e r l 的作用域,你就能够编写运行时不受你的程序的其余部分影响的函数。编写得非常出色
的函数可以在其他程序中重复使用。
在本学时中,你将要学习:
• 如何定义你自己的函数和如何调用这些函数。
• 如何将值传递给函数,然后返回值。
• 如何使用use strict来编写程序,以便强制使用某种结构。
8.1 创建和调用子例程
可以使用下面的代码来创建用户定义的子例程:
P e r l 中的子例程名与第2 学时中介绍的标量、数组和哈希结构的命名约定是相同的。子例
程与现有的变量可以使用相同的名字。但是,你应该避免创建名字与 P e r l 的内置函数和运算符
相同的子例程。如果在 P e r l 中创建了名字相同的两个子例程,那么在报警特性激活的情况下,
P e r l就会发出一条警告消息,否则第二个定义的名字会使第一个名字被忘记。
当子例程被调用时,子例程的代码启动运行,并且任何返回值均被重新传递到子例程被
调用时的位置。(调用子例程和返回值的内容将在后面介绍。)例如,下面这个短子例程将提
示用户输入一个答案:
若要调用一个子例程,可以使用下面两个语句行中的一个:
Y e s n o ( ) ;
或者
Y e s n o ( ) ;
如果代码中已经声明了子例程,那么可以使用第二个语句(不带 ); y e s n o ()语句
是任何位置上都能使用的。在本书中,我们将使用不带 的语句形式,虽然两种语句形式都
可以使用。
90使用第一部分 Perl 基础
下载
当子例程被调用时,P e r l 能够记住它是在什么位置被调用的,并执行子例程的代码,然后,
当子例程运行完成时,返回它记住的程序中的位置,如下面这个例子所示:
P e r l 的子例程可以在程序中的任何位置进行调用,包括在其他子例程中进行调用,如下所示:
8.1.1 返回子例程的值
子例程并不只是用于按照一个便于使用的名字将代码组合在一起。子例程与 P e r l 的函数、
运算符和表达式一样,它也有一个值。这个值称为子例程的返回值。子例程的返回值是子例
程中计算的最后一个表达式的值,或者是 r e t u r n语句显式返回的值。子例程的值是在子例程被
调用时计算的,然后该返回值将用于调用的任何子例程中。现在请看下面这个代码:
在上面这个代码段中,若要使 P e r l计算表达式 8* t w o _ b y _ f o u r ()的值,那么子例程t w o _
b y _ f o u r ()便开始运行,并返回值8 。然后计算表达式8* 8 ,并输出6 4 。
值也可以由子例程的 r e t u r n语句显式返回。当你的程序需要在子例程结束之前返回,或者
当你想要明确知道返回的是什么值,而不是“堕入”子例程的结尾并使用最后的表达式的值
时,就需要使用r e t u r n语句。下面这个代码段同时使用了两种方法:
子例程能够返回数组和哈希结构,也能返回标量,如下所示:
第8学时 函 数使用91
下载
8.1.2 参数
上面的所有子例程举例都有一个共同点,那就是它们都对硬编码的数据( 2* 4 )或者变量
进行操作,而这些变量里边恰好拥有正确的数据( x _ g r
显示全部