免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2275 | 回复: 5

一个开发中临时写的小工具,接触perl半年的初学者,请各位指教。 [复制链接]

论坛徽章:
0
发表于 2010-07-20 17:44 |显示全部楼层
  1. #!/usr/bin/perl -w
  2. # SCRIPT: gen_body.pl
  3. # AUTHOR: Ray001
  4. # DATE: 2010/07/20
  5. # REV: 1.00
  6. # For Development
  7. #
  8. # PURPOSE:
  9. # 根据头文件自动生成报文体解析函数(部分代码)

  10. use strict;

  11. if ( @ARGV < 1 ) {
  12.     die "Usage: gen_body.pl TABLE \n";
  13. }

  14. # 如果打开配置文件失败, 则报错退出
  15. open CFG_FILE, "<header.h"  or  die "Can't open head file! ($!) ";


  16. # 读取整个文件
  17. $/ = undef;
  18. $_ = <CFG_FILE>;

  19. # 初始化列数组为空
  20. my @array_col = ();

  21. # 匹配表对应的列的内容
  22. if (/struct $ARGV[0](.*?)\}/s) {
  23.     @array_col = split /\n/, $1;
  24. }
  25. # 不匹配则发出警告并退出
  26. else {
  27.     die "Table $ARGV[0] no matched!";
  28. }

  29. my $start_pos=91;
  30. print ( '    strncpy ( prt_body->lsh, prs_lsh, 16 );' );
  31. print ( "\n" );

  32. # 遍历数组
  33. foreach (@array_col) {
  34.     # 跳过不匹配的行, $1匹配表名, $2匹配长度
  35.     next unless /\s+char\s+(.*)\[([0-9]+)\]/;

  36.     next if ( $1 eq "lsh" );

  37.     # C风格字符串,实际长度要减一
  38.     my $length=$2-1;
  39.     print ( "    strncpy ( prt_body->$1, outBuf + $start_pos, $length );\n" );
  40.     $start_pos+=$length;
  41. }



复制代码
数了一下,第6个perl写的小程序。平时用得太少,进步慢啊!

论坛徽章:
0
发表于 2010-07-21 14:22 |显示全部楼层
没有具体的上下文环境
不太清楚具体的作用是啥,
看来也是从C过来的程序员,C味十足。
不过其实管用就好咯。慢慢学习

论坛徽章:
78
双子座
日期:2013-10-15 08:50:09天秤座
日期:2013-10-16 18:02:08白羊座
日期:2013-10-18 13:35:33天蝎座
日期:2013-10-18 13:37:06狮子座
日期:2013-10-18 13:40:31双子座
日期:2013-10-22 13:58:42戌狗
日期:2013-10-22 18:50:04CU十二周年纪念徽章
日期:2013-10-24 15:41:34巨蟹座
日期:2013-10-24 17:14:56处女座
日期:2013-10-24 17:15:30双子座
日期:2013-10-25 13:49:39午马
日期:2013-10-28 15:02:15
发表于 2010-07-22 14:04 |显示全部楼层
回复 1# Ray001


    print ( '    strncpy ( prt_body->lsh, prs_lsh, 16 );' );这句话只是为了打印'    strncpy ( prt_body->lsh, prs_lsh, 16 );'?

论坛徽章:
0
发表于 2010-07-22 15:40 |显示全部楼层
┏┛┻━━━┛┻┓   
┃||||||||||||||┃   
┃   ━   ┃   
┃ ┳┛ ┗┳ ┃   
┃       ┃   
┃   ┻   ┃   
┃       ┃   
┗━┓   ┏━┛   
  ┃   ┃     
  ┃   ┃     
  ┃   ┃      
  ┃   ┃   
  ┃   ┗━━━┓   
  ┃       ┣┓   
  ┃围观专用宠物 ┃   
  ┗┓┓┏━┳┓┏┛   
   ┃┫┫ ┃┫┫

论坛徽章:
0
发表于 2010-07-22 23:19 |显示全部楼层
其实perl很多语法是模仿C的吧。

论坛徽章:
0
发表于 2010-07-22 23:21 |显示全部楼层
回复  Ray001


    print ( '    strncpy ( prt_body->lsh, prs_lsh, 16 );' );这句话只是为了打印'   ...
yybmsrs 发表于 2010-07-22 14:04



    是的。这句是写死的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP