清新的Perl(六)——子函数
到现在为止,我已经讲了对于一位perl语言初学者来说,三大数据结构——标量、数组、散列的入门要点。本篇,我将讲解如何编写可以重复使用的函数。
Perl语言的函数,通常也叫作子例程或者方法(在面向对象编程模式下)。我们可以把数据结构的一些常用的处理方法编写为函数,以供反复使用。而编写函数,入门要点包括:
- 如何写一个简单的函数和函数调用。
- 如何给函数传递参数。
- 函数的返回值。
- 常用的变量限定词my。
一、写一个函数和函数调用
首先应该说明的是,perl函数的格式:
#函数声明的关键字为sub
sub 函数名{
语句;
语句;
……
}
函数应该如何调用呢?有两种形式,一种是函数名后面加括号“()”,另一种是函数名前面加与“&”。下面举个例子:
sub hello_world{
print "Hello World!\n";
}
#调用:
hello_world();
&hello_world;
二、函数的参数
作为函数,没有参数就是没有灵魂,有输入、有输出的函数才是我们开发程序的最佳帮手。
而perl语言的函数声明比较特殊,他是没有形参的。开头永远是“ sub 函数名{} ”这种形式。
那么,我该如何写有参函数呢?不要急,我们先来看看有参函数的调用:
#我们来改进一下前面的hello_world函数,让他拥有两个参数,第一个是姓名,第二个是网址。显示结果为“Hello World! I am 姓名, Welcome to access my website: 网址!”:
#首先创建标量:
$name = 'Harry Liu';
$url = 'www.lwc365.top';
#调用函数:
hello_world($name,$url);
上面的例子中,我们加入了两个参数name和url,那么下一步我们来理解perl是如何将参数传递入函数的:
当我们调用需要调用的函数带参数时,参数会根据先后顺序放在一个内置数组变量“@_”中的,比如说上面例子中@_数组内容为($name,$url)。在函数内部,我们使用shift方法从@_数组中取出参数值(在数组一篇中我讲过,shift可以从数组的最前面取值),通常情况@_可以省略,只保留shift关键字。那么,对于hello_world函数,就会有下面这样的实现:
sub hello_word{
$sub_name = shift;
$sub_url = shift;
#上面两句便是声明参数了.
print "Hello World! I am $sub_name, Welcome to access my website: $sub_url!\n";
}
三、函数返回值
和其他语言一样,在Perl语言中返回值关键字为return。
四、最常用的限定词my
my作为一种安全的作用域限定词,在Perl语言中广泛的使用。尤其是在用strict模式编写代码时,如果声明的变量没有使用限定词my,那么运行前检查会报错。
限定词my的意思在于将变量限定在最小的作用域范围内。如果我们不适用my限定作用域,声明的变量就是全局变量——整个文件内有效。