加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

函数

发布时间:2020-12-16 00:22:30 所属栏目:大数据 来源:网络整理
导读:-- Start 系统函数 Perl 提供了大量的函数供我们使用,详细列表见 perldoc 。 自定义函数 自定义函数又称子程序( subroutine ),子程序可以出现在程序的任何地方。一般放在程序的开始或结尾,下面是一个简单的例子。 #!/usr/bin/perl# 定义子程序sub max {my

-- 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,$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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读