2009年7月25日星期六

[PerlChina] Re: 请教一个正则表达式的问题

也即是$1的生存时间只在一个code block里,也即是$1不能从一个循环存活到下一个循环,到下一个循环就会重设为undef

foreach my $addr (@addrs)
{
$txt3 =~ /$addr\/0\s+(.*)/;
print $1,"\n";

}
如果执行上面这段,那进入循环的第二次后,$1就会重设为undef. 所以在第二次循环就会出现这样的警告:
Use of uninitialized value $1 in print at reg.pl line 21.

$txt3=~/$addrs[0]\/0\s+(.*)/;
print $1,"\n";
$txt3=~/$addrs[1]\/0\s+(.*)/;
print $1,"\n";
如果执行上面四行代码,那就会输入两次$1,即使第二次匹配失败。

我不确定在5.8中的行为,但起码现在5.10这样的情况是符合文档的。

On 7月25日, 下午9时40分, Lee Duhem <lee.du...@gmail.com> wrote:
> 2009/7/25 Cheese <cheese...@126.com>:
>
>
>
> > 看看你引用的那段的前一段:
> > The numbered match variables ($1, $2, $3, etc.) and the related
> > punctuation set ($+, $&, "$`", "$'", and $^N) are all
> > dynamically
> > scoped until the end of the enclosing block or until the next
> > successful match, whichever comes first. (See "Compound
> > Statements" in
> > perlsyn.)
>
> 你想说明什么?你能用这个解释 perl 5.10.0 在这里的行为么?
> 另外,这段话在 perl 5.8.8 的 perlre 中也是有的,你又如何用它来解释
> perl 5.8.8 在这里的行为?
>
> lee
--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---

没有评论: