my @ext_rows; for my $key (sort keys %extensions) { my $value = $extensions{$key}; my $color = link_color($key); # As you can see, the two cells in the rows each have $opt fields. # The first cell in the row gets a custom color for its text. # The second cell is part of a CSS class which is right aligned. push @ext_rows, [[$key, { style=> "$color" }],[$value, { class => 'right' }]]; } # Here are the final two rows in the extensions table. Later they will be plugged in # under whead. # The first cells in these two rows are headers which get no other special formatting. # The second cells in these two rows get right aligned with a CSS class. my @ext_end_rows; push @ext_end_rows, ['Total files',[$extensions_sum, { class => 'right' }]]; push @ext_end_rows, ['Total types',[$extensions_types, { class => 'right' }]]; # The table with file paths and file sizes is much much larger. # In the root directory I use, there are over 2,000 files meaning over 2,000 rows. my @size_rows; for my $key (sort { $file_sizes{$b}{bytes} <=> $file_sizes{$a}{bytes} || $a cmp $b } keys %file_sizes) { my $bytes = $file_sizes{$key}{bytes}; my $kbytes = $file_sizes{$key}{kilobytes}; my $mbytes = $file_sizes{$key}{megabytes}; my $color = link_color($key); my $link = uri_encode($key); $key =~ s!&!&!g; # Again, what do I store here? # The first cell is a link to the file. # The second through fourth are numbers which I mapped to be # pretty and be right aligned with a CSS class. push @size_rows, [qq($key), map { [pretty_number(5,$_), { class => 'right' }] } ($bytes,$kbytes,$mbytes) ]; } my $sum_bytes = $file_sizes_sum; my $sum_kbytes = $file_sizes_sum/1024; my $sum_mbytes = ($file_sizes_sum/1024)/1024; my $avg_bytes = $file_sizes_sum/$file_sizes_total; my $avg_kbytes = ($file_sizes_sum/$file_sizes_total)/1024; my $avg_mbytes = (($file_sizes_sum/$file_sizes_total)/1024)/1024; # Now these two rows are being stored with the other rows in the sizes table # with the same formatting. push @size_rows, ['Totals',map { [pretty_number(5,$_), { class => 'right' }] } ($sum_bytes,$sum_kbytes,$sum_mbytes)]; push @size_rows, ['Averages',map { [pretty_number(5,$_), { class => 'right' }] } ($avg_bytes,$avg_kbytes,$avg_mbytes)]; # With the way the data was gathered above, I was able to plug in the data # into the tables in a one liner (though they wrapped here). I did not store # the headings, since they did not require any real munging. table(3, { style => 'float:right', headings => ['Ext','Count'], data => [@ext_rows], whead => [@ext_end_rows] }); table(3, { headings => [qw(File bytes kilobytes megabytes)], whead => [@size_rows] });