您在那里拥有的东西称为“模板”。因此,您正在寻找一个模板系统。
假设这些引号实际上不在字符串中,我所知道的唯一能够理解模板语言的模板系统是String::Interpolate。
$ perl -E'
use String::Interpolate qw( interpolate );
my $template = q!This is a string with hash value of $foo->{bar}!;
local our $foo = { bar => 123 };
say interpolate($template);
'
This is a string with hash value of 123
如果引号是字符串的一部分,那么您所拥有的是 Perl 代码。因此,您可以通过执行字符串来获得所需的内容。这可以使用eval EXPR
.
$ perl -E'
my $template = q!"This is a string with hash value of $foo->{bar}"!;
my $foo = { bar => 123 };
my $result = eval($template);
die $@ if $@;
say $result;
'
This is a string with hash value of 123
我强烈建议不要这样做。我也不是特别发现 String::Interpolate 。Template::Toolkit可能是模板系统的流行选择。
$ perl -e'
use Template qw( );
my $template = q!This is a string with hash value of [% foo.bar %]!."\n";
my %vars = ( foo => { bar => 123 } );
Template->new()->process(\$template, \%vars);
'
This is a string with hash value of 123