模板工具包:return 如何从 MACRO BLOCK 哈希

Template Toolkit: how return a hash from a MACRO BLOCK

是否可以编写 return 散列给调用者的宏或块?

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

[%- 
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});
%]

有什么方法可以实现类似的模式吗?

当我遇到同样的问题时找不到方法。

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

示例定义:

[%
   # 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});
%]