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

[经验分享] 《中级perl》笔记 - 1, 热身运动

[复制链接]

尚未签到

发表于 2018-8-31 07:31:24 | 显示全部楼层 |阅读模式
  《中级perl》主要讲引用、复杂数据结构、面向对象以及如何写出中等规模的perl程序,另外还介绍了很多关于构件模块的内容。进入《中级perl》之前,先巩固一下必要的预备知识。
  注:基础perl知识请参考《perl语言入门》,我的头一个perl系列笔记也有详细的内容(英文版 :)
  ** 列表操作
  最常用的列表操作符:print sort reserve
  print ‘Two castaways are ‘, ‘Gilligan’,‘ and ‘,‘Skipper’,“\n”;
  my @castaways = sort qw(Gilligan Skipper Ginger ProfessorMary-Ann);
  my @castaways = reverse @castaways;
  一句话概括,print打印它的参数列表到输出(屏幕或者文件等输出系统),sort对它的参数列表进行排序,reverse 对它的参数列表进行逆序排列。
  ** grep列表操作
  my @lunch_choices = grep &is_edible($_),@gilligans_posessions;
  my @results = grep EXPR, @input_list;
  my $count= grepEXPR, @input_list;
  grep 依次取@input_list的元素,以EXPR对元素$_进行标量测试,返回所有为真的元素列表。如果把列表赋值给标量,标量值为返回列表的元素个数(上面最后一例$count)。
  my @input_numbers = (1, 2, 4, 8, 16, 32, 64);
  my @bigger_than_10 = grep $_ > 10, @input_numbers;# 得到列表(16,32, 64)
  my @end_in_4 = grep /4$/, @input_numbers;# 得到列表(4, 64)
  my @odd_digit_sum = grep digit_sum_is_odd($_),@input_numbers;# 得到列表(1, 16, 32)
  sub digit_sum_is_odd {
  my$input = shift;
  my@digits = split //, $input;#假定所有字符都是数字
  my $sum;
  $sum += $_ for @digits;
  return$sum % 2;
  }
  以上三个grep依次分别取@input_numbers所有元素中,大于10的、以4结尾的、数字之和为奇数的元素列表。可以不用函数,而直接用裸块来处理:
  my @odd_digit_sum = grep {
  my$sum;
  $sum +=$_ for split //;
  $sum %2;
  } @input_numbers;
  和之前的grep相比,这里有几个重要的变化:
  1、块{}后没有逗号
  2、没有return语句,因为它不是一个函数
  3、因为不是函数,所以直接处理$_,而不需要shift进行参数处理
  **map列表操作
  map和grep的操作方式非常类似,不同的是grep表达式以标量判断的方式对$_进行处理,返回的是参数列表的一部份(判断为真的元素列表);而map表达式以mapping方式对$_进行处理,mapping可以是任意能想到的处理。
  my @input_numbers = (1, 2, 4, 8, 16, 32, 64);
  my @result = map $_ + 100, @input_numbers;
  my @result = map { $_,3 * $_ } @input_numbers;
  上面第一个$result得到(101,102, 104, 108, 116, 132, 164);第二个$result得到(1, 3,2, 6, 4, 12, 8, 24, 16, 48, 32, 96, 64, 192),结果竟然比原列表元素还多!
  甚至还可以把结果赋值给哈希:
  my %hash = @result;#(1=>3, 2=>6, 4=>12, 8=>24, 16=>48, 32=>96, 64=>192)
  my %hash = map { $_,3 * $_ } @input_numbers;#一步到位
  ** eval捕捉致命错误
  my $average = $total / $count;# 除数为0可能导致程序崩溃!
  Print “okay\n” unless /$match/;# 可能非法的正则?
  &implement($_) foreach @rescue_schme;# 死于函数内部?
  my $average = eval { $total / $count };
  上例如果除数为零,eval返回undef,程序不会崩溃。


运维网声明 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-559067-1-1.html 上篇帖子: 安装perl5.10.0-3042824 下篇帖子: perl中语句种类
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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