免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3127 | 回复: 6
打印 上一主题 下一主题

perl if未执行 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-07-30 15:13 |只看该作者 |倒序浏览
本帖最后由 莫莫小米 于 2015-07-30 15:33 编辑

在log.txt中匹配regex.txt中第一列的行,并把中间的字符(\w)作为%hash的 key ,log.txt中匹配的行作为 value
  1. use strict;
  2. open(MYFILE,"E:/log.txt") or die("Can't open log.txt");
  3. open(OUTFILE,">E:/result.txt") or die("Can't open result.txt");
  4. open(REGEX,"E:/regex.txt") or die("Can't open regex.txt");

  5. my %hash;
  6. my @a = <REGEX>;
  7. while (my $log = <MYFILE>){
  8.     foreach my $a (@a) {
  9.         my @line = split/ /,$a;
  10.         my $regex = $line[0];
  11.         my $w = $1;
  12.         if ($log =~ /$regex/) {
  13.             $hash{$w} = $log;
  14.         }
  15.     }
  16. }
复制代码
我调试发现执行if语句时陷入死循环,这是为什么呢?
regex.txt的部分内容为:
  1. qw(\w)qw $1
  2. qe(\w)qe $2
  3. re(\w)re $3
  4. te(\w)te $4
  5. qa(\w)qa $5
  6. we(\w)we $6
复制代码
错了,if语句不是死循环,是没有执行,是因为regex.txt写错了还是什么原因?

论坛徽章:
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
2 [报告]
发表于 2015-07-31 04:12 |只看该作者
line 12, 13
  1. my $w = $1;
  2. if ($log =~ /$regex/) {
复制代码
==>

  1. if ($log =~ /$regex/) {
  2.     my $w = $1;
复制代码

论坛徽章:
0
3 [报告]
发表于 2015-07-31 08:42 |只看该作者
回复 2# rubyish

大牛,赞一个

不过为什么放在外面就不行呢
   

论坛徽章:
10
2015亚冠之广州富力
日期:2015-06-16 14:44:332015亚冠之西悉尼流浪者
日期:2015-08-19 13:14:352015亚冠之阿尔希拉尔
日期:2015-08-04 09:38:052015亚冠之萨济拖拉机
日期:2015-07-31 15:01:582015亚冠之首尔
日期:2015-07-27 14:24:312015亚冠之塔什干火车头
日期:2015-07-20 09:47:202015亚冠之布里斯班狮吼
日期:2015-07-15 14:58:432015亚冠之首尔
日期:2015-07-07 09:31:262015亚冠之广州恒大
日期:2015-07-06 15:41:272015亚冠之首尔
日期:2015-08-27 11:03:01
4 [报告]
发表于 2015-07-31 16:38 |只看该作者
放外面你还没匹配上呢,$1不是你希望的匹配内容吧?是存下来的别的东西

论坛徽章:
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
5 [报告]
发表于 2015-08-01 05:04 |只看该作者
回复 3# 莫莫小米

为什么放在外面就不行呢

xiaoxingan99:
放外面你还没匹配上呢

论坛徽章:
0
6 [报告]
发表于 2015-08-01 09:38 |只看该作者
懂了,谢谢两位大牛

论坛徽章:
12
2015年亚洲杯之乌兹别克斯坦
日期:2015-04-10 18:29:00狮子座
日期:2016-01-17 15:40:28处女座
日期:2016-01-16 17:36:17巨蟹座
日期:2016-01-16 17:35:48未羊
日期:2015-12-12 16:18:26青铜圣斗士
日期:2015-12-09 01:07:50IT运维版块每日发帖之星
日期:2015-12-05 06:20:00神斗士
日期:2015-12-03 23:13:59IT运维版块每日发帖之星
日期:2015-11-22 06:20:00IT运维版块每日发帖之星
日期:2015-11-08 06:20:00IT运维版块每日发帖之星
日期:2015-10-29 06:20:00IT运维版块每日发帖之星
日期:2016-06-30 06:20:00
7 [报告]
发表于 2015-08-01 21:56 |只看该作者
小白也过来学习下,应该是$1一开始没定义导致的吧,$1指匹配之后的括号中的数据
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP