【问题标题】:access variable member "*" in template访问模板中的变量成员“*”
【发布时间】:2014-11-26 21:40:43
【问题描述】:

我有一个变量

var1 = {
  '*'                   = >        {
    'counter'           = >        {
      'default'     = > '0',
      'description' = > 'test'
     }
   }
 }

在 perl 模板工具包中。 如何访问模板中“*”的内容。

[% var1.*.counter %]

不起作用,因为该符号没有有效的名称。

【问题讨论】:

    标签: perl template-toolkit


    【解决方案1】:

    您可以在模板中定义一个等于* 的变量,并使用它来代替。

    [% star = '*' %]
    [% var1.$star.counter.description %]
    

    但我想知道为什么您必须首先将星号作为键?在 Perl 级别提供一个明智的密钥会好得多,也许通过编写

    $vars->{var1}{star} = $vars->{var1}{'*'}
    

    在调用模板工具包之前。

    【讨论】:

    • 该工具包使用 XML 作为输入,将其转换为哈希结构以提供模板。名称属性为“*”的节点有特殊含义。
    • @vlad_tepesch:那是因为你使用values作为keys,这是不明智的。
    • 您可能是对的,但 xml 定义了一些数据结构,因此这些值通常是有效的标识符。星型成员应该代表数组成员的默认初始化
    • @vlad_tepesch:如果您使用 XML identifiers 作为哈希键,那很好,但属性值可以是任何字符串,这样使用它们是不合适的。您可以将 XML 处理成您喜欢使用的任何 Perl 数据结构,例如 XML::Twig 或 XML::LibXML,但我开始怀疑您使用的是糟糕的 XML::Simple,其自己的文档说它不应该用于新项目。但是,您似乎在这条道路上走得太远了,现在不值得改变策略,特别是如果这是您遇到的唯一异常情况。
    • 您对变量插值的建议将我带到了表达式 [% var1.${'*'}.counter.description %]。
    猜你喜欢
    • 2020-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-21
    • 2017-01-16
    • 1970-01-01
    • 2011-10-20
    相关资源
    最近更新 更多