Perl脚本优化:实现方法Size与Count相邻显示的表格输出
解决方案:调整Perl脚本实现Size与Count相邻列显示
要实现每个方法的Size和Count相邻显示的效果,我们需要重构表格的构建逻辑——原来的代码把所有方法的名称、Size、Count分别放在三行,现在要改成每个方法对应两列(一列显示Size,一列显示Count),同时标题行也要对应匹配这种结构。
具体修改思路
- 调整列生成逻辑:每个方法不再只生成一列,而是同时生成「名称列」和「Count标题列」、「Size内容列」和「Count内容列」,循环中一次性处理这两组列的格式化。
- 修正表格总长度计算:原来的总长度基于每个方法1列计算,现在每个方法占2列,所以总长度要改为
列宽 × 2 × 方法数量 + 1(+1是最后一个竖线的宽度)。 - 优化标题拼接:去掉方法名称自带的开头竖线,避免标题里出现重复的分隔符,让「X Count」的格式更自然。
修改后的完整脚本
#!/usr/bin/perl use strict; use warnings; use Data::Dumper; my $method_total = 1; my $method_a = 1; my $method_b = 1; my $method_sync = 1; my %total_hash = ( 'Method_Combine' => { 'flag' => 1, 'count' => 27, 'name' => '| Method TOTAL', 'size' => 270 }, 'Method_A' => { 'count' => 7, 'flag' => 1, 'name' => '| Method A', 'size' => 70 }, 'Method_B' => { 'count' => 20, 'flag' => 1, 'size' => 200, 'name' => '| Method B' }, 'Method_Sync' => { 'name' => '| Method Sync', 'size' => 300, 'flag' => 1, 'count' => 30 } ); printReport(\%total_hash); sub printReport { my $hash = shift; my $header_string = ""; my $content_string = ""; my $length = 20; # 每个方法占2列,计算表格总长度 my $total_length = $length * (2 * scalar keys %$hash) + 1; my @columns = ('Method_Sync','Method_A','Method_B','Method_Combine'); foreach my $key (@columns) { if ($hash->{$key}->{flag}) { # 处理标题行:方法名称列 + 方法Count标题列 my $method_name = substr($hash->{$key}->{name}, 2); # 去掉开头的"| " $header_string .= sprintf("%-" . $length . "s", $hash->{$key}->{name}); $header_string .= sprintf("%-" . $length . "s", "| " . $method_name . " Count"); # 处理内容行:Size列 + Count列 $content_string .= sprintf("%-" . $length . "s", "| " . $hash->{$key}->{size} . " Bytes"); $content_string .= sprintf("%-" . $length . "s", "| " . $hash->{$key}->{count}); } } print("Report:\n\n"); print "-" x $total_length."\n"; print $header_string . "|\n"; print "-" x $total_length."\n"; print $content_string . "|\n"; print "-" x $total_length."\n"; }
运行效果
执行修改后的脚本,输出会完全匹配你期望的格式:
Report: ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | Method Sync | Method Sync Count | Method A | Method A Count | Method B | Method B Count | Method TOTAL | Method TOTAL Count | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | 300 Bytes | 30 | 70 Bytes | 7 | 200 Bytes | 20 | 270 Bytes | 27 | -----------------------------------------------------------------------------------------------------------------------------------------------------------------
内容的提问来源于stack exchange,提问作者vkk05
相关产品推荐
相关产品推荐

