В начале я просто использовал следующее для подсчета длины каждой строки:
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);
}
для приведенного выше кода он работает во всех большинстве случаев, кроме одного, в wc
учитываются не все вкладки, а только та, которая не была взята с некоторыми символами, например, если на В начале строки я набираю 1234
, а затем нажимаю вкладку, в wc
она не считается вкладкой, но приведенный выше код учитывает, есть ли какие-либо способы, которые я мог бы использовать для решения этой проблемы? Спасибо
Решил, использовал Расширение вкладки , вот код:
1 while $string =~ s/\t+/' ' x (length($&) * 8 - length($`) % 8)/e;
$length=length($string);
Если бы кто-нибудь мог дать ему объяснение, это было бы замечательно, я проверил его на работоспособность, но не совсем понял. В любом случае, спасибо за помощь