TAB→空白の変換、正規表現一発で出来ないかなぁ
あまり知らないのに、ちょっと考えてみる。
s/((?:[^\t]{8})*)([^\t]{0,7})\t/ sprintf("%s%-8s", $1, $2)/eg;
全然自信なし。しかも、多分 sprintf よりも length の方がコストが低い……
適当にベンチマークスクリプトを作ってやってみたら、全然そんなことは無かった。sprintf の方が遙かに早い。
length と sprintf 自体は length の方が少し早いと言うことは、1回の正規表現マッチに時間がかかっているということなのだろうな。(両方とも eval だし、違いはマッチを何回やっているかだけだから。)