1

文字列内の変数が正規表現を使用した「$foo = 5」などの単純なスカラーである場合、これを行う方法を見つけました。しかし問題は、文字列内の変数が $foo->{bar} であり、これは 5 に等しい場合です。

したがって、サンプル文字列は次のとおりです。

「これは $foo->{bar} のハッシュ値を持つ文字列です」.

それを展開して読むにはどうすればよいですか:

「これはハッシュ値が 5 の文字列です」

ありがとう。

詳細な説明のために編集:

私は文字列リテラルを持っています (私は信じていますか? 私はこれの語彙が得意ではありません)、それは "Lorem Ipsum $foo->{bar} Lorem Ipsum" で、テキスト ソースから受け取りました。その文字列を取得し、すべての変数名をコード内の変数の実際の値に置き換えます。

4

2 に答える 2

4

そこにあるものを「テンプレート」と呼びます。そのため、テンプレート システムを探しています。

これらの引用符が実際には文字列に含まれていないと仮定すると、テンプレート言語を理解できる唯一のテンプレート システムは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
于 2012-10-05T18:36:55.640 に答える
-2

これはうまくいくはずです:

$foo->{"bar"} = 5;
printf "This is a string with hash value of $foo->{\"bar\"}]";
于 2012-10-05T18:27:27.640 に答える