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

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

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

关于perl - 模板工具包: how return a hash from a MACRO BLOCK,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54762573/

10-12 19:54