Лучше и безопаснее использовать вариант LIST system
, поскольку он позволяет избежать небезопасного анализа командной строки оболочки.Команда, sed
в вашем случае, получит аргументы командной строки без изменений и без необходимости заключать их в кавычки.
ПРИМЕЧАНИЕ: я добавил -MO=Deparse
только для того, чтобы проиллюстрировать, что компилирует однострочный.
ПРИМЕЧАНИЕ: я добавил -e
, чтобы быть в безопасности, поскольку у вас есть -i
в командной строке, которая ожидает параметр.
$ perl -MO=Deparse -e 'system(qw{sed -i -e}, "${vars}s/abc/xyz/", qw{filename.txt})'
system(('sed', '-i', '-e'), "${vars}s/abc/xyz/", 'filename.txt');
-e syntax OK
Конечно, вна самом деле было бы проще просто выполнить обработку в самом Perl вместо вызова sed
...