尼斯解決方案mpapec。
我作爲一個實驗開始了以下解決方案,看看我是否可以編寫只需要一個for循環的東西,而不需要END塊。它分解爲6個循環,而且是一個完美的例子,除非您的目標是混淆,否則永遠不會編碼。
是的,它使用一個外部模塊。是的,這是我會發布的愚蠢代碼(我希望)。但至少它可能會讓某個人輕笑一下。而且,它是有效的! :)
use Array::Transpose;
use List::Util qw(sum max);
use strict;
use warnings;
my $g;
my $l;
print "$_\n" for map {
join ' ', map {sprintf "%-$_->[0]s", $_->[1]} transpose [$l, $_]
} grep {
$l = [map {max @$_} transpose [[map {length $_} @$_], $l ||()]]
} [qw(Txt Num Ave Ave Ave)], map {
my @c = transpose $_;
[$c[0][0], $c[1][0], map {map {/\./ ? sprintf("%.1f", $_) : $_} sum(@$_)/@$_} @c[2..$#c]]
} map {
$g && $g->[0][0] eq $_->[0] ? (push @$g, $_) &&() : ($g = [$_])
} map {[split]} (<DATA>);
__DATA__
PHE 5 2 4 6
PHE 5 4 6 4
PHE 5 4 2 8
TRP 7 5 5 9
TRP 7 5 7 1
TRP 7 5 7 3
TYR 2 4 4 4
TYR 2 4 4 0
TYR 2 4 5 3
輸出
Txt Num Ave Ave Ave
PHE 5 3.3 4 6
TRP 7 5 6.3 4.3
TYR 2 4 4.3 2.3
是訂單(PHE,TRP,然後TYR),因爲那是有序還是因爲這是他們在輸入文件中出現的順序? – ysth
其輸入文件中存在的順序 –