设为首页 收藏本站
查看: 1077|回复: 0

[经验分享] perl学习(4) 子程序

[复制链接]

尚未签到

发表于 2015-12-28 15:02:57 | 显示全部楼层 |阅读模式
  子程序,类比c语言中的函数,在形式上个人认为最大的区别:没有形参
1.1.定义子程序
1.2.调用
  
  #! /usr/bin/perl
  
  sub marine
  {
      $n += 1 ;
      print "$n\n" ;
  }
  &marine;
  &marine;
  
  
1.3.返回值
1.3.1.    基本原则
  所有的Perl  子程序都会返回值,在Perl 中返回值和不返回值是没有区别的。当然,不是所有Perl子程序返回的值都是有用的。
  由于所有的被调用的子程序都要返回值,因此使用特殊的返回值语法在大多数情况下是一种浪费。因此Larry将之简化了。当Perl 遍历此子程序时,将会计算每一步的值。此子程序中最后计算的值将被返回。
  
  #! /usr/bin/perl
  
  $num1 = 10 ;
  $num2 = 20 ;
  sub marine
  {
      $n += 1 ;
      print "$n\n" ;
      $num1 + $num2 ;
  }
  &marine;
  &marine;
  print 1 + &marine,"\n" ;
  
  
  所有的函数都会有返回值:
print  语句,其返回值通常为1,意思是“print was succfessful(打印成功)”


1.3.2.    return
直接调用return情况也是有的


  
#! /usr/bin/perl

use strict ;


my @names = qw /fred barney betty dinoWilma pebbles bam-bamm/;

my $result = &which_element_is("dino", @names);

print $result ,"\n";


my $result = &which_element_is("betty", @names);

print $result ,"\n";

#

sub which_element_is

{

    my($what, @array) = @_;

    foreach(0..$#array){ #@array元素的索引

        if($what eq $array[$_]){

            return $_; #找到既返回

        }

    }

    -1; #没有找到元素(此处是可选的)

}

  

1.3.3.    返回列表
  
  
  
1.4.参数
Perl  子程序将参数列表传给子程序中的方法是,在程序名后面接括号,括号内存放参数列表,如:$n = &max(10,15); #此子程序有2个参数

此参数列表被传到子程序中,这些参数可以被子程序使用。当然,这些参存放在某个地方,在Perl中,会自动将此参数列表(此参数列表的另一个名字)自动存放在一个叫做@_的数组中。子程序可以访问次数组变量来确定此参数的个数以及其值,子程序参数的第一个值存放在$_[0]中,第二个存放在$_[1],依次类推。


Perl  不会关心是否有多余的变量。参数不够时也会被忽略,当传入的参数个数不够时,不够的参数会得到undef这个值。


@_是子程序的一个私有变量,如果有一个全局变量@_,它将在此子程序调用前存储起来,当子程序调用完成后,其早期的值会被重新赋还给@_。这意味着当将参数传递给子程序时不用担心它会影响此程序中其它子程序的@_这个变量的值。

嵌套的子程序调用时,@_的值和上述类似。甚至此子程序递归调用时,每一次调用将得到新的@_,因此子程序调用时将得到其自身的参数列表。


注意:

调用的子程序没有参数时,此时@_从此调用者的上下文(context)得到。这通常不是个好主意,但有时很有用。

在调用子程序时,参数会在子程序中被修改。

  
#! /usr/bin/perl


$num1 = 10 ;

$num2 = 20 ;

sub marine

{

    $n += 1 ;

    print "$n\n" ;

    $num1 + $num2 ;

    $_[0] += 20 ;

}

&marine;

&marine;

print 1 + &marine,"\n" ;


$arg = 10 ;

&marine($arg) ;

print $arg ,"\n";

  

更高级的max,可以不用限制参数个数

  
$maximum = &max(3,5,10,4,6);

sub max {

my($max_so_far) = shift @_;

foreach (@_){

if($_>$max_so_far){

$max_so_far=$_;

}

}

$max_so_far;

}

  



1.5.子程序私有变量
使用my创建私有变量:

sub max {

my($m,$n) = @_; #局部变量赋值

if($m > $n) {$m} else{$n}

  }
上面的一条语句创建了一些私有变量并给它们赋值,第一个为$m,第二个为$n。几乎每一个子程序都由类似的语句开头。当看见那一行时,你就知道此子程序需要2个变量,在此子程序中分别被叫做$m和$n。



1.6.strict pragrma
在程序顶端use strict(或者在任意块或者文件中,如果你需要在此部分使用它),Perl进行更严格的语法检测。

许多人推荐如果程序长度大于一个屏幕,则需要使用use strict

  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-157588-1-1.html 上篇帖子: NotePad++ 配置 Perl IDE 下篇帖子: perl进制转换
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表