免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: Iinvincible
打印 上一主题 下一主题

请教高手能不能给我解释一下这个脚本 [复制链接]

论坛徽章:
6
丑牛
日期:2014-03-21 15:42:04子鼠
日期:2014-04-12 11:50:17处女座
日期:2014-09-01 09:25:1115-16赛季CBA联赛之吉林
日期:2015-12-22 14:01:5215-16赛季CBA联赛之广东
日期:2016-03-08 18:49:422016科比退役纪念章
日期:2016-07-06 12:19:55
11 [报告]
发表于 2013-10-10 21:11 |只看该作者
本帖最后由 stanley_tam 于 2013-10-10 21:38 编辑

  1. r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
  2. 2  0 213728  87600 1183808 849440    0    0    86    85    2    0  3  3 92  2  0
  3. 0  0 213728  88864 1183808 849460    0    0     0     0 1022  372  5  3 93  0  0
  4. 0  0 213728  88740 1183808 849472    0    0     0     2 1014  285  0  0 100  0  0

  5. while (local $_ = <PH>) {
  6.      next if /---/;
  7.      s/^\s+|\s+$//g;
  8.      if (/\d+/ && @keys) {
  9.          @update{@keys} = split(/\s+/,$_);
  10.      } else { @keys = split(/\s+/,$_); }
  11. }

  12. /\d+/ && @keys =>  是指这一行里有数字,且@keys存在
  13. 如果这一行里没有数字,那肯定就是行:r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
  14. @keys = split(/\s+/,$_) =>将这一行按空格split,赋值给@keys

  15. Perl就是随意了一点,就落下了一个write only的计算机语言的评价。
  16. 建议遵循<<Perl最佳实践>> 一书


  17. 我的话会这么写,应该会清楚一点。。。 :)

  18. while (defined(my $line = readline PH)) {
  19.     # skip --- line
  20.     next if $line =~ m{---};
  21.    
  22.     # trim heading or trailing spaces
  23.     $line =~ m{^\s+ | \s+$}mgx;

  24.     # if line contain virtual memory state values
  25.     if ($line =~ m{ \d+ }x and scalar @keys) {
  26.         my @vmstat_numbers = split /\s+/, $line;

  27.         # swallow them to hash %update;
  28.         @update{@keys} = @vmstat_numbers;
  29.     }
  30.     else {
  31.         # vmstat head data, use it as keys for hash %update
  32.         @keys = split /\s+/, $line;
  33.     }

  34. }



复制代码
回复 8# Iinvincible


   

论坛徽章:
6
丑牛
日期:2014-03-21 15:42:04子鼠
日期:2014-04-12 11:50:17处女座
日期:2014-09-01 09:25:1115-16赛季CBA联赛之吉林
日期:2015-12-22 14:01:5215-16赛季CBA联赛之广东
日期:2016-03-08 18:49:422016科比退役纪念章
日期:2016-07-06 12:19:55
12 [报告]
发表于 2013-10-10 21:37 |只看该作者
  1. 高手不敢当,一起学习吧
  2. 偶认为while (local $_ = <PH>) {}   和   while (<PH>) {}基本等价。。。都是把PH里面的行赋值给了$_

  3. 差别在于:
  4. $_ = 'test';
  5. while (local $_ = <PH>) {};
  6. print $_;  # 为'test'
  7. __END__

  8. $_ = 'test';
  9. while (<PH>) {};
  10. print $_;  # 为 undef


复制代码
回复 10# pitonas


   

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
13 [报告]
发表于 2013-10-11 02:17 |只看该作者
回复 12# stanley_tam
  1. 差别在于:
  2. $_ = 'test';
  3. while (local $_ = <PH>) {};
  4. print $_;  # 为'test'
  5. __END__

  6. $_ = 'test';
  7. while (<PH>) {};
  8. print $_;  # 为 undef
复制代码
3Q~ 由浅入深,讲的不错,学习了。

   

论坛徽章:
0
14 [报告]
发表于 2013-10-11 10:22 |只看该作者
回复 8# Iinvincible
我觉得是 只要@keys 有数据且匹配 就为真,不知道对么

   

论坛徽章:
6
丑牛
日期:2014-03-21 15:42:04子鼠
日期:2014-04-12 11:50:17处女座
日期:2014-09-01 09:25:1115-16赛季CBA联赛之吉林
日期:2015-12-22 14:01:5215-16赛季CBA联赛之广东
日期:2016-03-08 18:49:422016科比退役纪念章
日期:2016-07-06 12:19:55
15 [报告]
发表于 2013-10-11 10:29 |只看该作者
谢谢大神夸奖{:3_193:} 回复 13# rubyish


   

论坛徽章:
5
丑牛
日期:2014-01-21 08:26:26卯兔
日期:2014-03-11 06:37:43天秤座
日期:2014-03-25 08:52:52寅虎
日期:2014-04-19 11:39:48午马
日期:2014-08-06 03:56:58
16 [报告]
发表于 2013-10-11 13:47 |只看该作者
回复 12# stanley_tam


    好厉害!又学了!谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP