1. Для начала почитайте документацию —
man perlre — пригодится в любом случае.
2. Затем определитесь с квантификаторами в регулярном выражении: меня смущает звёздочка с вопросительным знаком — обычно для того, чтобы обозначить ноль или больше любых символов применяют либо звёздочку, если нужно жадное поведение (
.*
— максимально возможное количество любых символов) либо плюс с вопросительным знаком, если жадность не нужна (
.+?
— минимально возможное количество любых символов).
3. Попутно можно и процедуру чтения файла упростить — можно сразу считать его в одну длинную строку, а не собирать её по кусочкам.
4. Как дальнейшее развитие третьего пункта — сто́ит активнее использовать различные ключи, с которыми запускается интерпретатор перла для того, чтобы не писать вручную всякий рутинный код — см.
man perlrun. Например, многострочную inplace-замену в файле с сохранением резервной копии можно выполнить командой
perl -0777 -pi~ -e 's/что/куда/g' /путь/к/файлу/где/менять.conf
То есть, вместо кучи малопонятного мусорного по сути своей кода останется только один оператор замены — ничего лишнего.
5. Ну и всё-таки надо чётко сформулировать, что же вам надо. Я могу предположить, что вы хотите заменить строку
"/var/www/$user/data/www/$domain"
на
"\n\tScriptAlias /php-bin/ /var/www/$user\n"
, но из вашего вопроса это явно не следует.
6. В вашем примере стирается слишком многое из-за того, что вы меняете на новое содержимое не то, что лежит в переменной
$find
, а вообще что угодно (
.*
).