В моей программе, я храню уровень отступа видел в @indentation_stack
Сравнивая с и т
Например:
$line =~ /^(\s*)(if|elif|else|while)/
push(@indentation_stack, $1);
Я тогда сравнить уровень отступа я вижу в следующей строке уровень отступа в последнем элементе @indentation_stack
.
if ($line =~ /^(\s*)[^\s+]/) {
while (@indentation_stack && $1 le $indentation_stack[-1]){
print $indentation_stack[-1],"}\n";
pop @indentation_stack;
}
}
Идея, если отступы на последующую строке эквивалентны последний элемент @indentation_stack
, я напечатать }
и символ новой строки.
Это работает нормально, пока отступы состоят из spaces
. Однако, если я создаю тот же уровень отступов, используя \t
, мой код не работает должным образом.
EDIT:
Если все интервалы согласованы, то используются все \t
или все spaces
, тогда проблем нет. Поэтому я думаю, что я пытаюсь понять, как я могу просто сравнить пространство. То есть \t
может быть эквивалентно числу spaces
.
Кто-нибудь знает, почему это происходит?
Благодарим за помощь.
Большинство языков, чувствительных к отступам, просто запрещают файлы, которые смешивают вкладки и пробелы. Они не сопоставимы, по крайней мере, не так, чтобы все были счастливы. – hobbs