你有什麼有被稱爲 「模板」。因此,您正在尋找一個模板系統。
假設這些引號實際上並不在字符串中,我知道唯一能夠理解該模板語言的模板系統是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 [email protected] if [email protected];
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
我想確認我的理解。你有一個字符串(不是一個可以被內插的文字),你需要搜索僞造插值的目的嗎? – mkb
我有一個字符串文字(我相信?我不是這個詞的最好的),那就是我從某些文本源獲得的「Lorem Ipsum $ foo - > {bar} Lorem Ipsum」。我想取這個字符串,用我的代碼中的變量的實際值替換所有的變量名稱。 –
那麼這個字符串在你的源代碼中用雙引號?然後在字符串中插入'$ foo - > {bar}''。如果它不在雙引號的源代碼中,那麼它不是文字。 – mkb