模板工具包: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});
%]
是否可以编写 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});
%]