找回密码
 注册
查看: 4694|回复: 0

perl语言正则表达式内存值的保存

[复制链接]
发表于 2011-11-14 20:43:19 | 显示全部楼层 |阅读模式
这些匹配变量的值会保持不变,直到下一个模式成功匹配为止◆。也就是说,一个没有匹配成功的模式将不会改变内存中
相应的值,但一个匹配上的模式将重写此内存。这明确的告诉你,不要随意的使用这些变量,除非明确知道它们匹配正确;
否则,你可能得到上个模式匹配的结果。下面的例子(不好的例子)本意是输出被$wilma 变量匹配的字符串。但如果匹配
失败,它将输出$1 中以前所匹配上的字符串。
◆这里的作用域规则相当复杂(可查看相关文档),除非你希望这些匹配变量在数行后还被使用,否则不会有什么问题。
$wilma =~ /(\w+)/; #不好,没有检测匹配的结果
print “Wilma’s word was $1… or was it?\n”;
这也是为什么模式匹配几乎都在if 和while 循环的条件判断出现的原因:
if ($wilma =~ /(\w+)/){
print “Wilma’s word was $1.\n”;
} else {
print “Wilma doesn’t have a word.\n”;
}
由于内存中的值不会一直保留,那应当在模式匹配后尽快地(几行内)使用像$1 这样的变量。如果维护人员在正则表达式和
使用$1 的表达式之间加入了新的正则表达式,那此时$1 的值为第二个匹配的结果,而非第一个。由于这个理由,如果要在
后面使用这个变量的值,应当将其拷贝到普通变量之中。这样做同时也可以使程序更易于阅读:
if($wilma =~ /(\w+)/){
my $wilma_word = $1;

}
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|生物统计家园 网站价格

GMT+8, 2024-12-4 01:28 , Processed in 0.024222 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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