免费注册 查看新帖 |

Chinaunix

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

反向引用得到 $1,$2...$100,怎么遍历他们? [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
11 [报告]
发表于 2007-01-27 13:41 |只看该作者
原帖由 ste2008 于 2007-1-27 13:36 发表


谢谢你
第1和第3种方法都用了数组,性能不好,而不如用split好了

第二种方法没看明白,因为我要的是 $2..$4,也就是匹配5个,但是这里只判断 $2,$3,$4
当然$1和$5也要保留的,别的地方要判断

哦,不好意思,第三个方法我多写了半句,其实是不需要 @matchs 数组的,那是第一个例子残留的,应该删掉。
第二个方法应该能满足你的要求。如果只要 2 3 4,就写
  1. my $var = "abcdefg";
  2. $var =~ /(a)(b)(c)(d)(.{0})efg/;
  3. foreach my $i (2,3,4) {
  4.         print substr( $var, $-[$i], $+[$i]-$-[$i] ), "\n";
  5. }
复制代码

好了。

论坛徽章:
0
12 [报告]
发表于 2007-01-27 13:50 |只看该作者
谢谢 flw
测试了一下,第3种方法性能还不错,但是不知道  no strict 'refs';是什么意思,还望赐教

第二种方法性能实际上是取子串,我的$1,$2,$3不一定是一个字符的,多了性能也不太好

my $var = "abcdefg";
$var =~ /(a)(b)(c)(d)(.{0})efg/;
{
    no strict 'refs';
    foreach my $i (2..100){
        last if not defined $$i;
        print $$i, "\n";
    }
}

论坛徽章:
0
13 [报告]
发表于 2007-01-27 13:51 |只看该作者
对了,no strict 'refs' 是临时打开符号引用,那么我只要打开一次就可以了吧?还是每判断一行打开一次?
因为对每行还要判断别的什么的,打开有,是否要关闭呢?怎么关闭
谢谢

论坛徽章:
0
14 [报告]
发表于 2007-01-27 14:00 |只看该作者
这里再加上一个 print $$i, "\n" if $$i ne '';
又很慢了,诶! 晕

论坛徽章:
0
15 [报告]
发表于 2007-01-27 16:50 |只看该作者
原帖由 ste2008 于 2007-1-27 14:00 发表
这里再加上一个 print $$i, "\n" if $$i ne '';
又很慢了,诶! 晕

my $tmp=$$i;
print $tmp,"\n" if $$i ne '';

论坛徽章:
0
16 [报告]
发表于 2007-01-27 17:20 |只看该作者
原帖由 战鹰 于 2007-1-27 16:50 发表

my $tmp=$$i;
print $tmp,"\n" if $$i ne '';


什么也打印不出来

论坛徽章:
0
17 [报告]
发表于 2007-01-27 21:24 |只看该作者
my $tmp=$$i;
print $tmp,"\n" if $tmp ne '';
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP