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一样

 

 

 

 

posted on 2012-03-10 13:23 韩英武 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/hanleilei/archive/2012/03/10/2379843.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值