使用Text::Table生成表格时,规则与列分隔符交叉处多+号问题排查
问题原因与解决方案
你遇到的三个+问题,根源在于创建表格时的分隔符定义方式:
当你用\'│'这种引用字符串作为Text::Table->new的参数时,Text::Table会把它识别为一个分隔符列(而非列之间的分隔符),这类列的宽度等于分隔符字符串的长度(这里是1)。调用rule('-','+')生成规则线时:
- 每个数据列的规则线用
-填充,两端用+收尾 - 分隔符列的整个宽度会被
+填充
三者连在一起就形成了+++的效果。
正确解决方案(推荐)
不要创建分隔符列,而是通过列的sep属性定义列之间的分隔符,这样分隔符不属于独立列,生成规则线时只会在对应位置显示单个+:
use strict; use warnings; use Text::Table; my $tb = Text::Table->new( "Heading 1", { sep => '│' }, "Heading 2", { sep => '│' }, "Heading 3" ); $tb->add("Row 1 Col 1", "Row 1 Col 2", "Row 1 Col 3"); $tb->add("Row 2 Col 1", "Row 2 Col 2", "Row 2 Col 3"); print $tb->title; print $tb->rule('-','+'); print $tb->body;
输出结果
Heading 1 │Heading 2 │Heading 3 -----------+-----------+----------- Row 1 Col 1│Row 1 Col 2│Row 1 Col 3 Row 2 Col 1│Row 2 Col 2│Row 2 Col 3
补充说明
Text::Table的构造函数中:
- 普通字符串会被当作列标题
- 引用字符串(如
\'xxx')会被创建为分隔符列(is_sep => 1),这类列在规则线生成时会用交叉字符填充整列 - 哈希引用(如
{ sep => 'xxx' })用于定义对应列之后的分隔符,不属于独立列,规则线生成时会自动替换为单个交叉字符
内容的提问来源于stack exchange,提问作者SSilk
相关产品推荐
相关产品推荐

