タブ文字は常に\t
です。これ以上言うことはありません。
ただし、一部のエディターでは、1 つのタブ文字が表すスペースの数について規則を使用しています。常識では 8 と言いますが、多くの人は 4 を意味します。私はそれが 3 や 2 つのスペースを意味することさえ見てきました。
一部のエディター (Komodo や Komodo Edit など) は賢くしようとします: ソース ファイルを読み取り、先頭のスペースとタブの典型的な分布を数えます。たとえば、先頭のスペースが 4、8、12、... しかない場合、タブ文字が 4 つのスペースを意味するはずであると暗黙的に想定する可能性があります。または、先頭に 2、4、6、... のスペースがある場合は、タブごとに 2 つのスペースを使用できます。
私があなたを正しく理解していれば、先頭のスペースに対して同様の動作が必要です。
この場合、次のコードを使用して、最も可能性の高いタブとスペースの値を判断できます。このコードは最適ではないことに注意してください。実際のタブを含む行は無視され、タブのインデントを取得するために最初のインデント レベルのみが考慮されます。これは、適切な実装を行うための出発点としてのみ考慮してください。
my %dist;
while (my $line = <>) {
my ($spaces) = ($line =~ /(^ *)/);
my $len = length($spaces);
$dist{$len}++;
}
my @sp = sort {$a <=> $b} keys %dist;
print "Leading space distribution in file: "
. join(",", @sp) . "\n";
if (scalar @sp >= 2) {
print "Most likely tab setting is: ", $sp[1] - $sp[0];
}