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

[经验分享] perl自学笔记整理(三)

[复制链接]
YunVN网友  发表于 2018-8-30 11:06:58 |阅读模式
  关于perl中的子程序
  1、定义子程序
  sub sub_programe_name {
  程序语句体;
  }
  2、调用子程序
  &sub_programe_name;
  3、子程序的返回值
  在子程序的执行过程中,它会不断进行运算。而最后一次运算的结果(不管是什么),都会被自动当成子程序的返回值。
  [root@localhost fuxi]# cat a4.pl
  #!/usr/bin/perl
  #subroutine
  sub sum_of_fred_and_barney {
  print "Hey , you called the sum_of_fred_and_barney subroutine!\n";
  $fred + $barney;  #这是该子程序的最后一次运算,其结果将成为本子程序的返回值。
  }
  ($fred, $barney) = qw( 3 4 );
  $wilma = &sum_of_fred_and_barney;
  print "\$wilma is $wilma.\n";
  $betty = 3 * &sum_of_fred_and_barney;
  print "\$betty is $betty.\n";
  [root@localhost fuxi]# perl a4.pl
  Hey , you called the sum_of_fred_and_barney subroutine!
  $wilma is 7.
  Hey , you called the sum_of_fred_and_barney subroutine!
  $betty is 21.
  4、向子程序中传递参数
  $n = &max(10, 15);        #包含两个参数的子程序调用
  参数列表将会被传入子程序,让子程序随意使用。当然,得先将这个列表存在某处,Perl会自动将参数列表化名为特殊的数组变量@_ , 改变量在子程序执行期间有效。子程序可以访问这个数组,以判断参数的个数以及参数的值。 @_ 变量是子程序的私有变量。假如已经有了全局变量@_ , 则该变量在子程序调用前会先被存起来,并在子程序返回时恢复原本的值。
  这表示子程序的第一个参数存储于$_[0],第二个参数存储于 $_[1],依次类推。
  5、长度可变的参数列表
  例如:求任意数中的最大值
  [root@localhost ccc]# cat test.pl
  #!/usr/bin/perl
  #test
  $max_num = &max( 1, 11, 11, 15, 7, 10 );
  sub max {
  my $num_max = shift @_;
  foreach (@_) {
  if ( $_ > $num_max ) {
  $num_max = $_;
  }
  }
  $num_max;
  }
  print "The max number is : $max_num\n";
  [root@localhost ccc]# ./test.pl
  The max number is : 15
  例如二:求任意数的最小值
  [root@localhost ccc]# cat test.pl
  #!/usr/bin/perl
  #test
  $max_num = &max( 1, 11, 11, 15, 7, 10 );
  sub max {
  my $num_max = shift @_;
  foreach (@_) {
  if ( $_ < $num_max ) {
  $num_max = $_;
  }
  }
  $num_max;
  }
  print "The min number is : $max_num\n";
  [root@localhost ccc]# ./test.pl
  The min number is : 1
  6、关于词法my变量
  my $aaaa= *****;    #不在任何语句块中的my管全局变量
  foreach (@bbbbb) {
  -----------
  -----------
  my $ccccc;        #在语句块中的my变量只对当前语句块生效,跳出后就恢复原有。
  }
  my($num) = @_;        #列表上下文, 和 ($num) = @_; 相同
  my $num = @_;     #标量上下文, 和 $num = @_; 相同
  my $fred, $barney;        #错! 没声明 $barney
  my ($fred, $barney);    #两个都声明了。
  my @new_number;        #你也可以用my来创建新的私有数组;所有新变量的值一开始都是空的:标量被设为undef, 数组被设为空列表。
  7、return操作符
  return操作符会从子程序中立即返回某个值,而不再执行子程序的其余部分。
  例如:
  [root@localhost ddd]# cat test12.pl
  #!/usr/bin/perl
  #test12
  my @test = qw( beijing shanghai guangzhou shenzhen );
  my $result = &aa( guangzhou, @test);
  sub aa {
  my ($what, @array) = @_;
  foreach (0..$#array) {
  if ($what eq @array[$_]) {
  return $_;            #如果找到下标值就立即返回$_的值;
  }
  }
  -1;        #其实这里的-1等同于return -1; 不过在此程序员省略了而已。
  }
  print "guangzhou 的下标值是: $result \n"
  [root@localhost ddd]# ./test12.pl
  guangzhou 的下标值是: 2
  8、子程序中的非标量返回值,比如返回一个列表值。
  例如:
  [root@localhost ddd]# cat test13.pl
  #!/usr/bin/perl
  #test13
  sub max_to_min {
  $fred = 16;
  $barney = 10;
  if ($fred < $barney) {
  reverse $fred .. $barney;
  }else{
  reverse $barney .. $fred;
  }
  }
  @cc = &max_to_min;
  print "@cc\n";
  [root@localhost ddd]# ./test13.pl
  16 15 14 13 12 11 10
  9、持久性私有变量--state
  在子程序中可以使用my操作符来创建私有变量,但每次调用这个子程序的时候,这个私有变量都会被重新定义。使用state操作符来声明变量,我们便可以在子程序的多次调用间保留变量的值,并将变量的作用域局限于子程序中。
  [root@localhost ddd]# cat test14.pl
  #!/usr/bin/perl
  #test14
  use 5.010;            #此处特别注意,如果不用5.10版,会导致state @numbers;行报错!!
  &running_sum( 5, 6 );
  &running_sum( 1..3 );
  &running_sum( 4 );
  sub running_sum {
  state $sum = 0;
  state @numbers;
  foreach my $number ( @_ ) {
  push @numbers, $number;
  $sum += $number;
  }
  print "The sum of (@numbers) is $sum\n";
  };
  [root@localhost ddd]# ./test14.pl
  The sum of (5 6) is 11
  The sum of (5 6 1 2 3) is 17
  The sum of (5 6 1 2 3 4) is 21


运维网声明 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-558857-1-1.html 上篇帖子: perl自学笔记整理二 下篇帖子: perl自学笔记整理
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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