如何将变量文本存储到数据库中?

问题描述:

我想将文本/字符串存储在数据库的文本字段中。
该字符串中包含变量$ name。
当我将它从数据库中拉出时,我希望在打印字符串之前将该变量替换为我定义的值。如何将变量文本存储到数据库中?

# Variable I want to substitute # 
1. $name='John'; 

    # needs to be read from database # 
2. $txt{'hello'}="Hello ${name}, How are you?"; 

3. print "<tag>$txt{'hello'}</tag>"; 

它打印Hello John, How are you?根据需要,但是,当第二行被从数据库中读出,它显示Hello ${name}, How are you?

有些事情,我发现是:

  1. Locale::Maketext
  2. $string =~ s/(\$\w+)/$1/eeg;
  3. my $string = sprintf 'Say hello to %s and %s', $foo, $bar;

有人能指导我如何做呢?

你所描述的是一个模板。 CPAN上有许多不同复杂程度的模板系统。 Text::TemplateTemplate Toolkit是一对流行的。你不想让你的模板访问任意变量;这是一个安全漏洞。相反,将它们允许访问的变量放入哈希中。

如果你需要的是一个非常简单的系统,你可以做这样的事情:

sub fill_in_template 
{ 
    my ($text, $values) = @_; 
    $text =~ s/ \$\{ ([^}\s]+) \} /$values->{$1}/gx; 
    return $text; 
} 

my %txt; 
my %values = (name => 'Your Name'); 

my $template = 'Hello ${name}, How are you?'; # $name NOT interpolated 
$txt{'hello'} = fill_in_template($template, \%values); 

print "<tag>$txt{'hello'}</tag>\n"; 

你可能会添加一些错误的情况下检查模板使用,这不是定义的字段。但是如果你需要比这更复杂的东西,你可能更适合从CPAN中选择现有的模板系统。

Locale::Maketext旨在用于国际化(因此,您的应用可以生成多种语言的输出,而无需翻译人员直接处理代码),而不是您要查找的模板引擎。