如何在文本字符串中扩展变量?

时间:2011-01-19 15:06:55

标签: perl

我有一个Perl脚本,我从一个包含变量名的配置文件中读取一行。当我将该行读入变量时,不会放入需要用给定值替换的变量名。我使用Config::Tiny来访问我的配置文件。例如:

配置文件

thing=I want to $this

脚本

$this = "run";
my $thing = $Config->{thing};
print $thing;

print $thingI want to $this的形式出现。我希望它以I want to run形式出现。

2 个答案:

答案 0 :(得分:9)

好的,所以你希望Perl评估你的字符串而不是打印它。

本Perl FAQ中实际涵盖了这一点: How can I expand variables in text strings?

简而言之,您可以使用以下正则表达式:

$string =~ s/(\$\w+)/$1/eeg;

小心:从脚本外部评估任意字符串是一个主要的安全风险。一个优秀的黑客可以利用它来在您的服务器上执行任意代码。

Brian的FAQ回答涵盖了其中一些内容。

答案 1 :(得分:3)

使用eval

print eval $thing;

使用包变量,也可以使用symbolic references

$thing =~ s/\$(\w+)/$$1/;