函数

-- Start

系统函数

Perl 提供了大量的函数供我们使用,详细列表见 perldoc


自定义函数

自定义函数又称子程序(subroutine),子程序可以出现在程序的任何地方。一般放在程序的开始或结尾,下面是一个简单的例子。

#!/usr/bin/perl

# 定义子程序
sub max {
	my ($num1, $num2) = @_;
	
	if($num1 > $num2) {
		return $num1;
	} else {
		return $num2;
	}
}


# 调用子程序
my $n = 1;
my $m = 2;
my $bigger = &max($n, $m);

  • Perl 使用 sub 关键字来定义子程序。
  • Perl 使用 & 来调用子程序,在不引起歧义的情况下,& 可以省略,但不推荐这么做。原因是如果某个自定义函数和系统函数同名,则默认是调用系统函数。
  • return 用来向调用者返回值,return 可以省略,默认情况下,子程序中最后执行的一个语句的值将作为返回值。
  • 子程序的参数自动存储在@_数组中。特别要注意的是,当向子程序传递数组时,数组中的所有值都会被copy到@_中。
  • my 关键字用来定义局部变量。

事实上,我们还可以在定义子程序的同时指定参数类型,下面是一个简单的例子。

#!/usr/bin/perl

# 定义子程序
sub max ($$) {
	my ($num1, $num2) = @_;
	
	if($num1 > $num2) {
		return $num1;
	} else {
		return $num2;
	}
}


# 调用子程序
my $n = 1;
my $m = 2;
my $bigger = &max($n, $m);

  • 参数类型: 简单变量($), 列表或数组(@), 散列(%), 匿名子程序(&), 引用(*)
  • 参数类型前加 \ 表示强制类型一致
  • 分号(;)用来分隔必须的参数和可选参数

我们已经知道了不能向传递标量那样向子程序传递数组,否则数组中的所有值都会被 copy 到@_ 中, 但是我们可以向子程序传递数组的引用,下面是一个简单的例子。

#!/usr/bin/perl


# 定义子程序
sub contains {
	my ($array, $element) = @_; # 此处接收的是数组的引用,所以是 $array,而不是 @array
	foreach my $e (@$array) {
		if ($e eq $element) {
			return 1;
		}
	}
	
	return 0;
}


# 调用子程序
my @names = qw(小李 小张 小王);
my $name = "小李";
if(&contains(\@names, $name)) { # 此处传递的是数组的引用
	print "存在\n";
} else {
	print "不存在\n";
}


全局变量与局部变量

全局变量

不加任何说明的变量为全局变量,它的作用范围为全局。

局部变量(my)

可以用 my 来修饰一个变量,此变量称为局部变量,它的作用范围为语句块。

局部变量(local)

可以用 local 来修饰一个变量,此变量也称为局部变量,它的作用范围为子程序及它调用的子程序。

#!/usr/bin/perl


# 定义子程序
sub test {
	local $name = "张三";
	&printName();
}

sub printName {
	print "$name"; # 此处可以访问变量 $name
}


# 调用子程序
&test();

use strict 编译命令

Perl 是一种非常松散的语言,这种过于松散的结构导致很多错误无法被识别,如:我们定义了一个标量,在随后的运算过程中我们将标量名写错误了,这将导致最终的运算结果错误,但是 Perl 并不会报任何错误。所以我们推荐在每一个 Perl 脚本都使用 use strict 编译命令,它将执行严格的语法检查,每个变量都必须用 my 来修饰。如:下面的代码将会报错。

#!/usr/bin/perl
use strict;

$name = "张三";
print $name;

-- 更多参见:Perl 精萃

-- 声 明:转载请注明出处
-- Last Updated on 2012-06-25
-- Written by ShangBo on 2012-06-25
-- End



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值