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

  • 相关阅读:
    Change the default MySQL data directory with SELinux enabled
    CentOS7使用firewalld打开关闭防火墙与端口
    常用screen参数
    Android手机上浏览器不支持带端口号wss解决方案
    How to Create Triggers in MySQL
    QT GUI @创建新的工程
    Linux内核源代码的结构(转)
    ARM体系的7种工作模式
    C语言中强制数据类型转换(转)
    Linux驱动设计—— 中断与时钟@request_irq参数详解
  • 原文地址:https://www.cnblogs.com/hanleilei/p/2379843.html
Copyright © 2011-2022 走看看