免费注册 查看新帖 |

Chinaunix

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

一个循环 的那个帖子咋锁贴了呀 [复制链接]

论坛徽章:
3
摩羯座
日期:2013-09-04 12:01:36申猴
日期:2013-10-23 12:12:23CU十二周年纪念徽章
日期:2013-10-24 15:41:34
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-08-29 15:53 |只看该作者 |正序浏览
本帖最后由 grshrd49 于 2013-08-29 15:54 编辑

给你写了一个 你试试
@sxd229
  1. use strict;
  2. my @a = <DATA>;
  3. my $do = 0;
  4. my @doarr;
  5. my @resule;
  6. for my $aa (@a){
  7.         chomp $aa;
  8.         if($aa =~ /^a\s+?(.*)/){
  9.                 @doarr = map{$1.$_}@doarr;
  10.                 push @resule,@doarr;
  11.                 @doarr = ();
  12.                 next;
  13.         }
  14.         push @doarr,$aa;
  15. }
  16. print "$_\n" for(@resule);

  17. __DATA__
  18. 11
  19. 22
  20. 33
  21. a 1
  22. 44
  23. 55
  24. 66
  25. a 2
  26. 77
  27. 88
  28. 99
  29. a 3
复制代码

论坛徽章:
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
21 [报告]
发表于 2013-08-31 07:37 |只看该作者
回复 18# xiumu2280
  1. while读DATA的时候应该是一行行读的
  2. 那@_读完一行不就初始化了嘛?
  3. 怎么还储存了上一行的数据。
复制代码

初始化是 $_,不是 @_

   

论坛徽章:
8
双子座
日期:2013-08-31 07:37:12金牛座
日期:2013-09-09 18:49:12处女座
日期:2013-09-23 11:43:14处女座
日期:2013-10-09 19:48:21狮子座
日期:2014-03-24 18:22:12丑牛
日期:2014-04-22 22:07:51申猴
日期:2014-06-12 21:54:13双鱼座
日期:2014-06-13 21:52:31
20 [报告]
发表于 2013-08-31 00:19 |只看该作者
明白了

回复 7# rubyish


   

论坛徽章:
8
双子座
日期:2013-08-31 07:37:12金牛座
日期:2013-09-09 18:49:12处女座
日期:2013-09-23 11:43:14处女座
日期:2013-10-09 19:48:21狮子座
日期:2014-03-24 18:22:12丑牛
日期:2014-04-22 22:07:51申猴
日期:2014-06-12 21:54:13双鱼座
日期:2014-06-13 21:52:31
19 [报告]
发表于 2013-08-30 21:15 |只看该作者
请教一下大牛,是怎样把数组上次push的数据清空的,难道是splice @_?

回复 7# rubyish


   

论坛徽章:
8
技术图书徽章
日期:2013-09-30 08:51:28技术图书徽章
日期:2013-12-11 09:26:39白羊座
日期:2013-12-27 15:27:13金牛座
日期:2014-01-06 09:13:05天蝎座
日期:2014-01-21 14:23:28酉鸡
日期:2014-05-09 16:51:12卯兔
日期:2014-08-11 16:49:1515-16赛季CBA联赛之八一
日期:2017-08-14 23:24:57
18 [报告]
发表于 2013-08-30 15:34 |只看该作者
我有个疑问,while读DATA的时候应该是一行行读的·· 那@_读完一行不就初始化了嘛?
怎么还储存了上一行的数据。
回复 7# rubyish


   

论坛徽章:
0
17 [报告]
发表于 2013-08-30 15:22 |只看该作者
mcshell 发表于 2013-08-30 14:08
回复 15# 午夜凋零

是这样的:


结合着你的例子,又搜到了版主之前给你解答的内容,这下明白了。非常感谢~~  

http://bbs.chinaunix.net/forum.p ... ;page=1#pid22327578

论坛徽章:
3
CU十二周年纪念徽章
日期:2013-10-24 15:41:34子鼠
日期:2013-12-14 14:57:19射手座
日期:2014-04-25 21:23:23
16 [报告]
发表于 2013-08-30 14:08 |只看该作者
回复 15# 午夜凋零

是这样的:
(??{code})参与到正则运算了,也就是说后面的$1又参与到匹配中去了,产生了回朔,因为他需要尝试匹配字符。回朔了结果如下:


  1. $a=~/(\d+)(?{print "$1\n"})(?!)/;# (?!)此次进行强行回朔,相当于模拟了一下,你也可以直接输出刚才的结果$1
  2. 输出了:
  3. 123
  4. 12
  5. 1
  6. 23
  7. 2
  8. 3
复制代码
所以产生了上面的结果
再比如:
  1. my $a = "abc123def";
  2. $a =~ /(\d+)((??{$1+1}))(\d+)(?{print "$1|$2|$3"})/;
复制代码
$2就是前面$1+1  也就是 1+1   
匹配到了2
$3是3  

罗嗦了这么多,不过还是要多用才明白
   

论坛徽章:
0
15 [报告]
发表于 2013-08-30 13:16 |只看该作者
mcshell 发表于 2013-08-30 11:02
回复 11# 午夜凋零
(?{code})就是可以将匹配到的结果用于逻辑运算,但是不会影响正则的匹配
(??{code})  ...


非常感谢。
上面那种明白了。
下面那种试了试,还是不太清楚是什么原理,下面是我的尝试,不知道为什么会打印出下面的结果。
  1. my @array;
  2. my $a = "abc123def";
  3. $a =~ /(\d+)(??{push @array, $1+4})/;
  4. print "@array"."\n";
复制代码
  1. 127 16 5 27 6 7
复制代码

论坛徽章:
3
CU十二周年纪念徽章
日期:2013-10-24 15:41:34子鼠
日期:2013-12-14 14:57:19射手座
日期:2014-04-25 21:23:23
14 [报告]
发表于 2013-08-30 11:02 |只看该作者
回复 11# 午夜凋零
(?{code})就是可以将匹配到的结果用于逻辑运算,但是不会影响正则的匹配
(??{code}) 和上面不同点在于,可以上次匹配的结果经过计算再动态插入在正则中。

开始可能不懂,,用多就就明白了,我也是请教过版主,用的多了 感觉很偷懒~~

   

论坛徽章:
0
13 [报告]
发表于 2013-08-30 10:21 |只看该作者
:wink:
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP