我對大標量運行正則表達式。雖然這場比賽沒有什麼捕獲,我的過程本場比賽後,由長30M:爲什麼我的Perl正則表達式使用這麼多的內存?
# 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版本刪除了對$&
的引用並緩解了該問題。
當然看起來就是這樣。我無法在我的perl上運行FindAmpersand,因爲我啓用了線程,所以我正在重新編譯perl來運行此測試,但SawAmpersand正在報告是。 – 2008-10-03 05:30:41