Я использую этот код для удаления всех дубликатов, но мне нужно удалить только определенные дубликаты и оставить все остальные без изменений.
В моем случае, если строка соответствует /^\s+INDEX 00 \d\d:\d\d:\d\d$/
, сохраните каждую уникальную первую строку, но удалите дубликаты и оставьте все строки, которые не соответствуют регулярному выражению.
tie my @lines, 'Tie::File', $fn or die "could not tie file: $!";
my %seen;
@lines = grep(!$seen{$_}++, @lines);
untie @lines;