有没有一种有效的方法可以使用 Perl 散列中的值替换一堆字符串?
例如,
$regex{foo} = "bar";
$regex{hello} = "world";
$regex{python} = "perl";
open(F, "myfile.txt");
while (<F>) {
foreach $key (keys %regex) {
s/$key/$regex{$key}/g;
}
}
close(F);
有没有办法在 Perl 中完成上述任务?
第一个问题:你确定你拥有的是效率低下?
其次,最明显的下一步是将所有内容放入一个正则表达式中:
my $check = join '|', keys %regex;
然后你可以进行替换:
s/($check)/$regex{$1}/g;
如果键有足够的重叠,正则表达式引擎必须不断地重新检查相同的字母,这仍然可能是“慢”的。你可以使用类似的东西正则表达式::优化器 http://search.cpan.org/perldoc?Regexp%3a%3aOptimizer以消除重叠。但是优化的成本可能比只做所有事情的成本更高,具体取决于有多少更改(散列中的键/值)以及您要修改的行数。过早的优化——!
当然,请注意,您的示例代码在替换后不会对文本执行任何操作。它不会就地修改文件,所以我假设您正在单独处理该文件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)