如何在每次迭代时清空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
相关产品推荐
相关产品推荐

