Что некорректно?

Нашел вот на Яндексе задачку:

Что некорректно в следующем коде?

#!/usr/bin/perl
while (<>) {
    while (m/\t/) {
        $tabs_count++;
    }
    print "$tabs_count\n";
}

Ну незнаю в чем трабл?! Может кто подскажет?

Я бы зделал так:

while (<>)
{
   @lst = m/\t/g;
   $cnt =  scalar @lst;
   print "$cnt\n";
}

;)

Первый пример

Первый пример "поймает" любую строку в которой есть хоть один таб, и посчитает ее один раз, даже если в ней сотня табов.
Соответственно, если цель посчитать именно строки, где есть табы, то все правильно.

прикольный код

Прикольный код, давеча написал!-)

@a = qw (1 2 3 4 5 6 7 8 9 0 a b c d e f 1 3 5 );
@b = qw(1 3 5 7 9);
print "@a\n@b\n\n";
@d = @a;
map {$b=$_, @d = grep $_!=$b, @d} (@b);
print "@d\n";
@c = @a;
map {$b=$_, @c = grep $_!=$b, @c} (@d);
print "@c\n";

Прикольность в самом методе фильтрации, порядке
использования общего $_ - оригинально!
(сначала получаем элементы map, затем портим $_
элементами grep, затем снова map и т.д...)

А насчет топика, Что некорректно?
ОТВЕТ: надо было в конце рега поставить модификатор g
ну и конечно инициализировать счетчик нулем, вначале!
;)
(невнимательность иногда очень подводит!)

...

Ещё несколько вариаций на свободную тему

#
print scalar map { ""} (<>=~/\t/g);
#

while(<>)
{
  print $cnt+= scalar map {""} (<>=~/\t/g);
}

open (SRC, "<$0");
while()
{
  $cnt+= scalar map {""} (/\n/g);
}
print "==$cnt\n";

...

Интересная Вики о Perl http://ru.wikipedia.org/wiki/Perl

Тоже неплохо, книжки разные... http://perl.find-info.ru/

Конфуз вышел в предудущем посте: съелась строка <SRC>

open (SRC, "<$0");
while(<SRC>)
{
  $cnt+= scalar map {""} (/\n/g);
}
print "==$cnt\n";

((-))