LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1296|回复: 1

一个perl匹配的问题想请教大家

[复制链接]
发表于 2006-1-11 17:29:12 | 显示全部楼层 |阅读模式
程序很简单,是这样的:
#!/usr/bin/shell;

my $word= "perl is perl Perl PERL pERl";
my @perls;

$word =~ /perl/gi;

if (@perls = $word =~ /perl/gi){ print "@perls\n"};
if (@perls = $word =~ /perl/gi){ print "@perls\n"};

结果很奇怪,按理说应该打印出的"@perls结果是一样的,可是却是
perl  Perl PERL pERl
perl  perl Perl PERL pERl

如果将$word =~ /perl/gi;注释掉则结果为
perl  perl Perl PERL pERl
perl  perl Perl PERL pERl

而如果将$word =~ /perl/gi;这句话重复两遍,则结果为
Perl PERL pERl
perl  perl Perl PERL pERl,而我调试时,无论上述那种情况打印出的$word都是
perl is perl Perl PERL pERl
看起来$word =~ /perl/gi会将匹配结果吞掉,感觉很奇怪的样子,能否有人帮我解释一下这是为什么呢?
谢谢!
发表于 2006-1-12 09:54:29 | 显示全部楼层
形如//g的匹配模式在标量/数组上下文中的表现是不同的
在标量上下文中,它只执行一次匹配,并记录匹配结束时的位置,这个位置可以用pos函数来获取
例:pos $word
在数组上下文中,若没有捕获小括号,则返回所有匹配结果
//g的匹配总是从上一次匹配结束时的位置开始
http://perldoc.perl.org/perlop.html#Regexp-Quote-Like-Operators
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表