You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Template Toolkit的Perl代码块中返回值用于I2C编程

解决Template Toolkit宏返回变量并传递的问题

问题根源

原代码的核心问题有两个:

  • PERL块内创建的结果哈希未同步到Template的变量空间,导致外部无法获取bin_value
  • 错误地通过$stash->get()获取宏参数,应直接使用宏传入的参数值

修改后的核心宏代码

[% MACRO i2c_write(rv, address, data) PERL -%]
my ($rv_name, $address_hex, $data_hex) = @_;
# 十六进制转十进制
my $address = hex($address_hex);
my $data = hex($data_hex);
# 格式化为8位二进制字符串
my %result = (
    bin_address => sprintf("%08b", $address),
    bin_data    => sprintf("%08b", $data)
);
# 将结果绑定到Template指定变量
$stash->set($rv_name, \%result);
[% END -%]

调用宏并验证输出

[%# 调用宏,指定结果存入bin_value变量 %]
[% i2c_write('bin_value', '0x10', '0x3B') %]

[%# 输出验证 %]
bin_value.bin_address = [% bin_value.bin_address %]
bin_value.bin_data    = [% bin_value.bin_data %]

执行后预期输出:

bin_value.bin_address = 00010000
bin_value.bin_data    = 00111011

传递变量到解析宏的示例

定义一个解析二进制每一位的宏,直接传入bin_value的属性即可:

[% MACRO parse_binary_bits(bin_str, label) -%]
[% "${label} 二进制位解析:" %]
[% FOR idx IN 0..7 %]
    第[% 7 - idx %]位:[% bin_str.substr(idx, 1) %]
[% END %]
[% END -%]

[%# 传递bin_value的属性到解析宏 %]
[% parse_binary_bits(bin_value.bin_address, "I2C地址") %]
[% parse_binary_bits(bin_value.bin_data, "I2C数据") %]

内容的提问来源于stack exchange,提问作者varun kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 00:12:15