-- 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);
事实上,我们还可以在定义子程序的同时指定参数类型,下面是一个简单的例子。
#!/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 来修饰一个变量,此变量称为局部变量,它的作用范围为语句块。
可以用 local 来修饰一个变量,此变量也称为局部变量,它的作用范围为子程序及它调用的子程序。
#!/usr/bin/perl # 定义子程序 sub test { local $name = "张三"; &printName(); } sub printName { print "$name"; # 此处可以访问变量 $name } # 调用子程序 &test();
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