【发布时间】:2013-05-02 05:12:56
【问题描述】:
我正在尝试在替换字符串中使用变量插值,包括$1、$2、...
但是,我无法将 $1 扩展为替换。我最终将拥有
$pattern 和 $replacement 变量可以从配置文件中读取,但即使
手动设置它们不起作用。
在示例脚本中,您可以看到$1(应该是'DEF')不是
在$new_name 中展开,但它在$new_name2 中(没有变量)。
在替换中添加一个“e”标志没有帮助。
我该如何解决这个问题?
马特
示例代码:
#!/usr/local/bin/perl
use strict;
my $old_name = 'ABC_DEF_GHI';
my $pattern = 'ABC_(...)_GHI';
my $replacement = 'CBA_${1}_IHG';
# using variables - doesn't work
my $new_name = $old_name;
$new_name =~ s|$pattern|$replacement|;
printf("%s --> %s\n", $old_name, $new_name);
# not using variables - does work
my $new_name2 = $old_name;
$new_name2 =~ s|ABC_(...)_GHI|CBA_${1}_IHG|;
printf("%s --> %s\n", $old_name, $new_name2);
输出:
ABC_DEF_GHI --> CBA_${1}_IHG
ABC_DEF_GHI --> CBA_DEF_IHG
【问题讨论】:
-
我的解决方案是:
$new_name =~ s|$pattern|qq("$replacement")|ee;
标签: perl variables interpolation