看輸入的形式 我假設同pin一定排在一起 而且裡面的數字一定降冪
如果不是 也可以寫個sort排一下 應該沒幾行
然後就照前面c大的說法來寫 寫成這樣
my $str = 'A, B, C[1], C[0], D, P[3], P[2], P[1],';
my @arr = split /, */, $str;
my (@out, @bus);
sub bus_out {
return unless @bus;
push @out, "[$bus[1]:$bus[2]] $bus[0]";
@bus = ();
}
for (@arr) {
if (/(\w+)\[(\d+)\]/) {
@bus ? ($bus[2] = $2) : (@bus = ($1, $2, $2));
} else {
bus_out;
push @out, $_;
}
}
bus_out;
print "$_;\n" for (@out);
要寫得乾淨比我想像中還難 沒幾行卻寫了好久 orz