Perl 正则表达式相关特性解析
1. local 变量的形象类比
local 变量可以类比为一张透明胶片,就像投影仪使用的那种。当你对某个变量使用 local 时,就如同在该变量上覆盖了这张透明胶片,你可以在上面随意书写自己的修改内容。你以及其他查看该变量的对象(如子程序和信号处理程序)都能看到新的值。这些新值会覆盖之前的值,直到所在的代码块最终退出。此时,透明胶片会自动移除,也就意味着自 local 操作以来所做的任何更改都被消除了。
这种类比比“创建内部副本”的说法更接近实际情况。使用 local 并不会真正创建副本,而是在每次访问变量值时,将新值置于检查列表的前面(即遮蔽原始值)。退出代码块时,会移除自代码块开始以来添加的所有遮蔽值。虽然可以手动使用 local 添加值,但我们关注局部化的主要原因在于:正则表达式的副作用变量会自动进行动态作用域设置。
2. 正则表达式的动态作用域
动态作用域与正则表达式密切相关。许多变量(如 $& 表示匹配的文本, $1 表示第一个带括号子表达式匹配的文本)会在成功匹配后自动设置,这些变量在进入每个代码块时会自动进行动态作用域设置。
以下是一个示例:
if ( m/(...)/ )
{
DoSomeOtherStuff();
print "the matched text was $1.\n";
}
由于 $1 的值在进入每个代码块时会自动进行动态作用域设置,所以这段代
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



