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

vla*_*sch 5 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});
%]
Run Code Online (Sandbox Code Playgroud)

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

ike*_*ami 6

当我面临同样的问题时,我找不到办法。

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

示例定义:

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

使用示例:

[%
   newOb = {};
   MakeSomeThing(newOb, 'foo');
   dumper.dump({'newOb' => newOb});
%]
Run Code Online (Sandbox Code Playgroud)