我正在对一个大标量运行正则表达式。虽然这场比赛没有捕捉到任何东西,但我的进程在这场比赛之后增长了 30M:
# A
if (${$c} =~ m/\G<<\s*/cgs)
{
#B
...
}
$c
是对一个相当大的标量(大约 21M)的引用,但我已经验证它pos(${$c})
在正确的位置,并且表达式在第一个字符处匹配,并在匹配pos(${$c})
后更新到正确的位置。但正如我所提到的,这个过程在#A 和#B 之间增长了大约 30M,即使我没有用这场比赛捕捉到任何东西。我的记忆去哪儿了?
编辑:是的,使用$&
是罪魁祸首。我们使用的是 Perl 5.8.8,而我的脚本使用的是Getopt::Declare,它使用内置的Text::Balanced。该模块的 1.95 版本使用$&
. Perl 5.10 附带的 2.0.0 版本删除了对的引用$&
并缓解了该问题。