Если вы определяете абзацы двойным переводом строки ("\ n \ n"), тогда это будет сделано:
open READFILE, "<$filename"
or die "cannot open file `$filename' for reading: $!";
my @paragraphs;
{local $/; @paragraphs = split "\n\n", <READFILE>} # slurp-split
my $num_paragraphs = scalar @paragraphs;
__END__
В противном случае просто измените "\ n \ n" в коде, чтобы использовать собственный разделитель абзацев. Это может быть даже хорошая идея использовать шаблон \n{2,}
, на тот случай, если кто-то сошел с ума от клавиши ввода.
Если вас беспокоит потребление памяти, возможно, вы захотите сделать что-то вроде этого (извините за трудно читаемый код):
my $num_paragraphs;
{local $/; $num_paragraphs = @{[ <READFILE> =~ /\n\n/g ]} + 1}
Хотя, если вы хотите продолжать использовать свой собственный код, вы можете изменить if($C ne"\n")
на if($c eq "\n")
.