第一个问题:你确定你有什么效率不高吗?
第二,最明显的下一步是将所有内容都转化为单个正则表达式:
my $check = join '|',keys %regex;
然后你可以做以下替代:
s/($check)/$regex{$1}/g;
这可能仍然是“缓慢的”与正确目录引擎必须不断重新检查相同的字母键的足够重叠.您可以使用像Regexp::Optimizer这样的东西来消除重叠.但是,优化的成本可能超过只做任何事情的成本,具体取决于修改的次数(密钥/值)以及修改的行数.过早优化 – !
请注意,当然,您的示例代码在替换后没有对文本做任何事情.它不会原位修改文件,所以我假设你单独处理.