Две проблемы, которые я вижу.
Ваша первая проблема заключается в том, что замена s///
не прекращена:
s/hello/c:\foo # fatal syntax error: "Substitution replacement not terminated"
s/hello/c:\foo/ # syntactically okay
s!hello!c:\foo! # also okay, and more readable with backslashes (IMHO)
Ваша вторая проблема, та, о которой вы спрашивали,что \f
принимается как escape-последовательность формы (ASCII 0x0C), так же, как это было бы в двойных кавычках, а это не то, что вам нужно.обратная косая черта или переменная интерполяция «скрывают» проблему:
s!hello!c:\\foo! # This will do what you want. Note double backslash.
my $replacement = 'c:\foo' # N.B.: Using single quotes here, not double quotes
s!hello!$replacement!; # This also works
Посмотрите на обработку Операторов типа «цитирование» и «Цитата» в perlop
для получения дополнительной информации.