【发布时间】:2015-04-29 06:36:33
【问题描述】:
我当前的脚本将采用一个表达式,例如:
my $expression = '( a || b || c )';
并使用 sub/replace 遍历输入的每个布尔组合,如下所示:
my $keys = join '|', keys %stimhash;
$expression =~ s/($keys)\b/$stimhash{$1}/g;
所以例如表达式可能成立,
( 0 || 1 || 0 )
这很好用。
但是,我想允许变量(也在 %stimhash 中)包含标签 *。
my $expression = '( a* || b* || c* )';
另外,打印 stimhash 返回的键:
a*|b*|c*
它没有正确地替换/替换为额外的特殊字符 *.
它给出了这个警告:
在替换迭代器中使用 %stimhash 中的未初始化值
我尝试使用 quotemeta(),但目前效果不佳。
它会丢弃这些值。替换后的示例如下所示:
( * || * || * )
欢迎提出任何建议,
约翰
【问题讨论】:
标签: regex perl hashtable substitution string-substitution