模板工具包:如何​​从宏块返回哈希

时间:2019-02-19 09:16:49

标签: perl template-toolkit

是否可以编写将散列返回给调用方的宏或块?

我试图模块化一些模板代码:

[%- 
MACRO MakeSomeThing(something) BLOCK;
  s = {  a => 'a',
         b => something,
         c => 'c'
      };
  # RETURN s;  # not allowed
  # s;         # just returns the hash ref string (HASH(0x32e42e4))
END;


  newOb =  MakeSomeThing('foo');
  dumper.dump({'newOb' => newOb});
%]

有没有办法实现类似的模式?

1 个答案:

答案 0 :(得分:4)

遇到相同的问题时,我找不到办法。

作为一种解决方法,您可以传入一个引用并让宏修改引用的变量。这适用于数组和哈希。

示例定义:

[%
   # usage: newOb={}; MakeSomeThing(newOb, something)
   MACRO MakeSomeThing(rv, something) BLOCK;
      rv.a = 'a';
      rv.b = something;
      rv.c = 'c';
   END;
%]

示例用法:

[%
   newOb = {};
   MakeSomeThing(newOb, 'foo');
   dumper.dump({'newOb' => newOb});
%]