Есть пара проблем.Вам нужно использовать глобальное совпадение, чтобы найти несколько совпадений.Также ваше регулярное выражение просто соответствует последнему \R
Так, для регулярного выражения используйте это m/\R(?=\R*$)/g
, которое соответствует \R
, за которым следует 0 или более \R
, а затем конец строки.
Другая проблема заключается в том, что my $number = ( $text =~ /\R$/ );
не возвращает количество совпадений.Возвращает 1
, если есть совпадение.Для этого вы должны использовать цикл while (с флагом g
для регулярного выражения)
Наконец, последняя строка должна быть printf
вместо sprintf
:
use strict;
use warnings;
my $text = "ASD
ASD
ASD
ASD
";
printf "text is [%s]", $text; # debug this
my $number = 0;
$number++ while $text =~ m/\R(?=\R*$)/g;
# # or use this instead:
# my $number = () = $text =~ m/\R(?=\R*$)/g;
printf "\n\nFile has [%i] errant CRLFs at the EOF\n", $number;
Выход:
text is [ASD
ASD
ASD
ASD
]
File has [6] errant CRLFs at the EOF