免费注册 查看新帖 |

Chinaunix

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

奇怪的数组 [复制链接]

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
发表于 2015-07-03 15:42 |显示全部楼层

代码一,
  1. #!/usr/bin/env perl

  2. use strict;
  3. use Data::Dumper;
  4. my $id;

  5. my @wd; ###

  6. while(<DATA>){
  7.         if(/>/){
  8.                 print $_;
  9.                 my $next=<DATA>;
  10.                 chomp($next);
  11.                 print $next,"\n";
  12.                 $next=~m{(.{10})(?{push @wd,$1;})(?!)};
  13.                 print Dumper \@wd;
  14.                 undef @wd;
  15.         }
  16. }

  17. __DATA__
  18. >ID
  19. ACTCGATTTCTTGAATTTAT
  20. >ID
  21. ACTCGATTTCTTGAA
  22. >ID
  23. ACTCGATTTCTTGAATT

  24. #运行输出
  25. >ID
  26. ACTCGATTTCTTGAATTTAT
  27. $VAR1 = [
  28.           'ACTCGATTTC',
  29.           'CTCGATTTCT',
  30.           'TCGATTTCTT',
  31.           'CGATTTCTTG',
  32.           'GATTTCTTGA',
  33.           'ATTTCTTGAA',
  34.           'TTTCTTGAAT',
  35.           'TTCTTGAATT',
  36.           'TCTTGAATTT',
  37.           'CTTGAATTTA',
  38.           'TTGAATTTAT',
  39. '         'TGAATTTAT
  40.         ];
  41. >ID
  42. ACTCGATTTCTTGAA
  43. $VAR1 = [
  44.           'ACTCGATTTC',
  45.           'CTCGATTTCT',
  46.           'TCGATTTCTT',
  47.           'CGATTTCTTG',
  48.           'GATTTCTTGA',
  49.           'ATTTCTTGAA',
  50. '         'TTTCTTGAA
  51.         ];
  52. >ID
  53. ACTCGATTTCTTGAATT
  54. $VAR1 = [
  55.           'ACTCGATTTC',
  56.           'CTCGATTTCT',
  57.           'TCGATTTCTT',
  58.           'CGATTTCTTG',
  59.           'GATTTCTTGA',
  60.           'ATTTCTTGAA',
  61.           'TTTCTTGAAT',
  62.           'TTCTTGAATT'
  63.         ];

复制代码
代码2,

  1. #!/usr/bin/env perl

  2. use strict;
  3. use Data::Dumper;
  4. my $id;

  5. while(<DATA>){
  6.         if(/>/){
  7.                 print $_;
  8.                 my $next=<DATA>;
  9.                 chomp($next);

  10.                 my @wd;   ###

  11.                 print $next,"\n";
  12.                 $next=~m{(.{10})(?{push @wd,$1;})(?!)};
  13.                 print Dumper \@wd;
  14.                 undef @wd;
  15.         }
  16. }

  17. __DATA__
  18. >ID
  19. ACTCGATTTCTTGAATTTAT
  20. >ID
  21. ACTCGATTTCTTGAA
  22. >ID
  23. ACTCGATTTCTTGAATT


  24. #运行输出:

  25. >ID
  26. ACTCGATTTCTTGAATTTAT
  27. $VAR1 = [
  28.           'ACTCGATTTC',
  29.           'CTCGATTTCT',
  30.           'TCGATTTCTT',
  31.           'CGATTTCTTG',
  32.           'GATTTCTTGA',
  33.           'ATTTCTTGAA',
  34.           'TTTCTTGAAT',
  35.           'TTCTTGAATT',
  36.           'TCTTGAATTT',
  37.           'CTTGAATTTA',
  38.           'TTGAATTTAT',
  39. '         'TGAATTTAT
  40.         ];
  41. >ID
  42. ACTCGATTTCTTGAA
  43. $VAR1 = [];
  44. >ID
  45. ACTCGATTTCTTGAATT
  46. $VAR1 = [];
复制代码
上面的代码1和2的@wd这个数组变量,位置不一样,结果也不一样,不过按照我的理解是一样,没想明白,貌似和正则的(?{})有关系,求解释~

求职 : 软件工程师
论坛徽章:
3
程序设计版块每日发帖之星
日期:2015-10-07 06:20:00程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2016-05-05 06:20:00
发表于 2015-07-03 17:38 |显示全部楼层
当初我使用到代码内插这些特性的时候,也是莫名其妙的出现了很多问题,后来干脆不用了。

你想要的是不是获得所有10个字符的组合数组?

论坛徽章:
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
发表于 2015-07-03 18:32 |显示全部楼层
  1.                  Due to an unfortunate implementation issue, the Perl code
  2.                  contained in these blocks is treated as a compile time
  3.                  closure that can have seemingly bizarre consequences when
  4.                  used with lexically scoped variables inside of subroutines or
  5.                  loops.  There are various workarounds for this, including
  6.                  simply using global variables instead.  If you are using this
  7.                  construct and strange results occur then check for the use of
  8.                  lexically scoped variables.
复制代码
perldoc perlre里面的,估计是这个原因

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
发表于 2015-07-03 20:00 |显示全部楼层
只能用全局变量,需要用到 local 声明离开作用域恢复原来的值的特性来实现回溯

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
发表于 2015-07-07 13:56 |显示全部楼层
谢谢all,是闭包的问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

DTCC2020中国数据库技术大会 限时8.5折

【架构革新 高效可控】2020年8月17日~19日第十一届中国数据库技术大会将在北京隆重召开。

大会设置2大主会场,20+技术专场,将邀请超百位行业专家,重点围绕数据架构、AI与大数据、传统企业数据库实践和国产开源数据库等内容展开分享和探讨,为广大数据领域从业人士提供一场年度盛会和交流平台。

http://dtcc.it168.com


大会官网>>
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP