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

如何在每次迭代时清空Text::SimpleTable生成的表格

解决Text::SimpleTable每次迭代表格内容追加的问题

你的问题根源在于复用了同一个Text::SimpleTable对象,每次调用row()方法都会往该对象中追加新行,导致后续打印时会包含之前所有的行数据。下面提供两种可行的解决方式:

方法一:每次迭代新建表格对象

将表格的初始化代码移到循环内部,确保每次迭代都使用全新的表格实例,只存储当前行的数据:

#!/tool/pandora64/bin/perl5.18.1
use strict;
use warnings;
use Text::SimpleTable; 

my $a=1;my $b=2; my $c=3; my $d=4; my @p_arr = (1,2);

foreach my $p(@p_arr){
    # 每次循环创建新的表格对象
    my $table = Text::SimpleTable->new([1, "A"], [2, "B"], [3, "C"], [4, "D"]);
    $table->row($a,$b,$c,$d);
    $a+=1; $b+=1; $c+=1; $d+=1;
    print "\nAfter $p iteration\n";
    print $table->draw;
}

方法二:清空已有表格的行数据

如果不想重复创建对象,可以直接操作表格对象内部的rows属性,在每次打印后将其重置为空数组,清除之前的行数据:

#!/tool/pandora64/bin/perl5.18.1
use strict;
use warnings;
use Text::SimpleTable; 

my $a=1;my $b=2; my $c=3; my $d=4; my @p_arr = (1,2);
my $table = Text::SimpleTable->new([1, "A"], [2, "B"], [3, "C"], [4, "D"]);

foreach my $p(@p_arr){
    $table->row($a,$b,$c,$d);
    $a+=1; $b+=1; $c+=1; $d+=1;
    print "\nAfter $p iteration\n";
    print $table->draw;
    # 清空表格存储的行数据
    $table->{rows} = [];
}

两种方法都能实现你的需求:每次迭代后只显示当前行的表格内容,不会出现追加的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 11:55:18