最初は、以下を使用して各行の長さを数えました。
while(<FH>){
chomp;
$length=length($_);
}
しかし、得られた結果をLinuxコマンドWCによって生成された結果と比較すると、問題が見つかりました。ファイル内のすべてのタブ文字が1 character
perlの長さとして扱われるのに対し、それは8
のためのものであるwc
ため、次の変更を行いました。
while(<FH>){
chomp;
my $length=length($_);
my $tabCount= tr/\t/\t/;
my $lineLength=$wc-$tabCount+($tabCount*8);
}
上記のコードでは、1つを除いて、現在ほとんどすべてのケースで機能します。wc
すべてのタブがカウントされるわけではありませんが、一部の文字が含まれていないものだけがカウントされます。たとえば、行の先頭にある場合は、入力して1234
からタブを押すと、タブwc
としてカウントされませんが、上記のコードはそれをカウントしましたが、この問題を解決するために採用できる方法はありますか?ありがとう
それを解決し、タブ拡張を使用しました、ここにコードがあります:
1 while $string =~ s/\t+/' ' x (length($&) * 8 - length($`) % 8)/e;
$length=length($string);
誰かがそれを説明することができれば、それは素晴らしいでしょう、私はそれが機能していることをテストしましたが、それを完全には理解していません。とにかく、すべての助けに感謝します