Вы используете printf
там, и он думает, что его первый аргумент является строкой формата. Подробнее см. Документацию printf
. Когда я сталкиваюсь с такой проблемой, я всегда проверяю, правильно ли я использую функции. :)
Вы, вероятно, хотите просто print :
print FILE $content;
В вашем примере вам не нужно читать весь файл, поскольку ваша подстановка не пересекает строки. Вместо того, чтобы пытаться одновременно читать и записывать одно и то же имя файла, используйте временный файл:
open my($in), "<", $file or die "cannot open file $file\n";
open my($out), ">", "$file.bak" or die "cannot open file $file.bak\n";
while( <$in> )
{
s{status=["'][\w ]*["']\s*}{}gi;
print $out;
}
rename "$file.bak", $file or die "Could not rename file\n";
Это также сводится к этой программе командной строки:
% perl -pi.bak -e 's{status=["\']\\w ]*["\']\\s*}{}g' file