Ваш шаблон соответствует двум датам, поэтому следующее совпадение будет продолжаться, фактически пропуская строку.
Нет смысла проверять, начинается ли следующая строка с даты, поэтому вы можете использовать
while (<DATA>) {
next if !m{^(\d+/\d+/\d+)};
print "*$1*\n";
}
Если вы не читали из файла:
while ($file =~ m{^(\d+/\d+/\d+)}mg) {
print "*$1*\n";
}
Если каждая строка начинается с даты, вы можете даже использовать
while (<DATA>) {
my @fields = split;
print "*$fields[0]*\n";
}
Если вы неt чтение из файла:
while ($file =~ /^(.*)/mg) {
my @fields = split;
print "*$1*\n";
}
Отсутствие /s
означает, что .
не будет соответствовать переводу строки, что означает, что он не будет совпадать после конца строки.