在模板中访问变量成员"*"

vla*_*sch 0 perl template-toolkit

我有一个变量

var1 = {
  '*'                   = >        {
    'counter'           = >        {
      'default'     = > '0',
      'description' = > 'test'
     }
   }
 }
Run Code Online (Sandbox Code Playgroud)

在perl模板工具包中.如何访问模板中的"*"内容.

[% var1.*.counter %]
Run Code Online (Sandbox Code Playgroud)

因为符号没有有效名称而无效.

Bor*_*din 6

您可以将变量定义为*在模板中等于,并使用该变量.

[% star = '*' %]
[% var1.$star.counter.description %]
Run Code Online (Sandbox Code Playgroud)

但我想知道为什么你必须首先用星号作为关键字?在Perl级别提供合理的密钥可能要好得多,也许是通过写作

$vars->{var1}{star} = $vars->{var1}{'*'}
Run Code Online (Sandbox Code Playgroud)

在调用Template Toolkit之前.

  • @vlad_tepesch:如果你使用XML*标识符*作为很好的哈希键,但属性值可以是任何字符串,并且不适合像这样使用它们.您可以将XML处理成您喜欢的任何Perl数据结构,例如,`XML :: Twig`或`XML :: LibXML`,但我开始怀疑您使用了糟糕的`XML :: Simple`,他们自己的文件说它不应该用在新项目中.然而,看起来你可能已经沿着这条道路走得太远,因为它现在值得改变方向,特别是如果这是你遇到的唯一的异常情况. (2认同)