Как я понимаю, вы хотите заменить man
между пробельными символами или началом / концом строки.
В этом случае вы можете использовать два подхода, с положительными поисковыми обходами, содержащими оператор чередования, проверяющий границы строк и / или пробелы, или отрицательными поисковыми обходами, проверяющими непробельные символы на обоих концах поискового слова.
Используйте любой из двух:
$name =~ s/(?<=^|\s)man(?=\z|\s)/nam/g;
$name =~ s/(?<!\S)man(?!\S)/nam/g;
С точки зрения эффективности второй вариант лучше, так как чередование немного "дорого".
Положительный просмотр (?<=^|\s)
соответствует местоположению в строке, которому предшествует начало строки (^
) или (|
), пробел (\s
) и положительный просмотр (?=$|\s)
гарантируют, что есть пробел или конец строки ($
) сразу после man
.
(?<!\S)
отрицательный lookbehind соответствует расположению в строке, которому непосредственно не предшествует непробельный символ, т. Е. Если есть непробельный символ, совпадения не будет), и (?!\S)
отрицательный прогноз указывает там сразу после man
.
См. Более подробную информацию о Локальные утверждения в perlre
.