kient88 发表于 2015-12-28 12:43:12

Perl 学习手札之十:subroutines

  understanding subroutines
  
  subroutines(sometimes called "functions") are a means of encapsulating code.

  subroutines are reusable.

  subroutines can hide complexity.
  subroutines can call other subroutines.
  subroutines can call themselves.

  this is called "recursion"http://www.cnblogs.com/hanleilei/admin/EditPosts.aspx?IsDraft=1

  
  defining.pl


1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5 use subs qw( message error);#加上这个语句,就可以在调用函数的时候去掉括号,否则只能把函数定义放在调用前面
6
7 main(@ARGV);
8
9 sub main
10 {
11   message "This is the template.pl exercise file from Perl 5 Essential Training.";
12   message "message two";
13   error "message three";
14 }
15
16 sub message
17 {
18   my $m = shift or return;
19   print("$m\n");
20 }
21
22 sub error
23 {
24   my $e = shift || 'unkown error';
25   print("$0: $e\n");
26   exit 0;
27 }  注意:上面的例子的message语句是没有括号的,因为从一开始先申明了调用message的子函数,否则需要把申明子函数放在main函数之前。

  
  argument.pl



#!/usr/bin/perl
#
use strict;
use warnings;
main(@ARGV);
sub main
{
    my $s = "This is the template.pl exercise file from Perl 5 Essential Training.";
    my $y = "42";
    my $z = "zee";
    message($s,$y,$z);
}
sub message
{
    my ($s,$y,$z)= @_;
    print("$s,($y),($z)\n");
}
sub error
{
    my $e = shift || 'unkown error';
    print("$0: $e\n");
    exit 0;
}  注意以上的message子函数的参数传递:先传递给一个默认数组,然后传递给标量。

  
  scope.pl



#!/usr/bin/perl
#
use strict;
use warnings;
my $g= "yet other string";
main(@ARGV);
sub main
{
    my $m = "some other string";
    message("This is the template.pl exercise file from Perl 5 Essential Training.");
    message($m);
}
sub message
{
    my $m = shift or return;
    print("$g:$m\n");
}
sub error
{
    my $e = shift || 'unkown error';
    print("$0: $e\n");
    exit 0;
}  上面的例子描述了标量的作用域。

  return.pl


#!/usr/bin/perl
#
use strict;
use warnings;
main(@ARGV);
sub main
{
    my $num = addnum(2,4);
    message($num);
    message(addnum(5,8));
}
sub addnum{
    my ($v1,$v2)=@_;
    return $v1+$v2;
}
sub message
{
    my $m = shift or return;
    print("$m\n");
}
sub error
{
    my $e = shift || 'unkown error';
    print("$0: $e\n");
    exit 0;
}  上面的例子描述了子函数的返回值,和C一样

  
  
  
  
页: [1]
查看完整版本: Perl 学习手札之十:subroutines