zoukankan      html  css  js  c++  java
  • 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一样

  • 相关阅读:
    Remmina:一个 Linux 下功能丰富的远程桌面共享工具(转载)
    Linux安装多功能词典GoldenDict
    Ubuntu18.04 更改GRUB引导菜单背景图片和默认启动项
    ubuntu 18.04网卡命名规则改回传统的ethx
    Linux Putty 复制粘贴
    Ubuntu 18.04图形化软件包管理器
    Ubuntu 18.04 安装 Broadcom Limited BCM43142无线网卡驱动
    Linux下通过rdesktop连接Windows远程桌面
    Debian9.5 系统配置NFS配置说明
    CentOS6.9下NFS配置说明
  • 原文地址:https://www.cnblogs.com/hanleilei/p/2379843.html
Copyright © 2011-2022 走看看