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

Perl循环处理多组怪物数据:解决变量覆盖与按需输出问题

解决Perl循环覆盖变量仅输出最后一组数据的问题

核心解决思路

每次收集完一组兽人属性数据后,立即输出当前拼接好的内容,然后重置存储变量,再启动下一组数据的收集,彻底避免后续数据覆盖之前的内容。

具体代码实现示例

假设你的兽人数据以空行作为组分隔(每行格式为字段名: 值,比如Name: 血牙兽人),可以按以下方式调整脚本:

#!/usr/bin/perl
use strict;
use warnings;

my $combatblock = '';

# 读取数据(这里以标准输入为例,可替换为open读取文件的逻辑)
while (my $line = <>) {
    chomp $line;

    # 识别一组数据的结束标记(此处用空行,可根据实际格式修改)
    if ($line eq '') {
        # 输出当前组内容(仅当变量非空时输出)
        print $combatblock . "\n=== 兽人分隔线 ===\n" if $combatblock;
        # 重置变量,准备接收下一组数据
        $combatblock = '';
        next;
    }

    # 精准提取需要的字段
    if ($line =~ /^(Name|DEX|DB|MP|HP):\s*(.+)$/) {
        my ($field, $value) = ($1, $2);
        # 按指定格式拼接内容到变量
        $combatblock .= "$field: $value\n";
    }
}

# 处理最后一组数据(避免文件末尾无分隔标记导致数据遗漏)
print $combatblock if $combatblock;

关键调整说明

  • 及时输出+重置:检测到组结束标记时,立刻输出当前组内容并清空存储变量,确保下一组数据从零开始积累。
  • 边界处理:循环结束后检查变量是否还有内容,避免最后一组因无分隔标记被遗漏。
  • 精准字段匹配:用正则锁定需要的字段,防止无关数据混入结果。

如果你的数据不是用空行分隔,只需修改组结束的判断条件即可(比如换成特定字符串CREATURE_END)。

内容的提问来源于stack exchange,提问作者Colin Brett

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 04:29:56