В Perl, как «перепрыгнуть» определенный текст и выполнить поиск и замену в оставшейся части? [Дубликат]

На этот вопрос уже есть ответ здесь:

Как выполнить поиск и замену в заданных диапазонах $ start- $ end? 4 ответа

Текст имеет много вхожденийpattern; выполняя поиск и замену регулярных выражений, я хочу перепрыгнуть через определенные сегменты текста и заменитьpattern в оставшейся части. Пример, в коде:

#!/usr/bin/env perl
use strict;
use warnings;

#iterate the DATA filehandle
while (<DATA>) {
    # This one replaces ALL occurrences of pattern.
    s/old/new/gs;
    # How do I skip the unwanted segments and do the replace?
    #print all
    print;
}

##inlined data filehandle for testing. 
__DATA__
START xx old xx END     --> within boundaries,  should NOT replace
START xx old
      xx old xx END     --> within boundaries,  should NOT replace
// xx old               --> within comment,     should NOT replace
xx // xx old            --> within comment,     should NOT replace
. old old xx            --> following a point,  should NOT replace
                            first one, just replace second one
xx .
  old
  old xx                --> following a point,  should NOT replace first
                            one, just replace second one.
xx old xx               --> other scenarioes,   should REPLACE

РЕДАКТИРОВАТЬ 16.2.22(обновлено 16.2.23) Критерии замены / отсутствия замены следующие: (1)START а такжеEND может быть на одной строке или занимать несколько строк, всеpatterns в этом диапазоне НЕ должны заменяться;

(2). а такжеpattern могут иметь или не иметь пробелы, табуляции, новые строки между ними, первое вхождениеpattern после. следует заменить;

(3) комментарии всегда будут одной строкой, начинающейся с //; не учитывайте / * ... * / стиль комментариев на данный момент.

(4)// может быть или не быть первым символом строки; так же и с..

Все, что находится между START_FLAG и END_FLAG или что-либо внутри комментария, должно игнорироваться; и, еслиpattern следует за ".", это также следует игнорировать.patterns в оставшейся части текста должны быть заменены новыми. Я пытался использоватьs/START.*?END|\/\/.*?\n|.\s*\w+|\w+//g вещи, но просто не может прийти к решению.

Это кажется немного запутанным для меня; любая помощь? Спасибо заранее :-)

Ответы на вопрос(1)

Ваш ответ на вопрос