Windows cmd.exe
does not use '
as string delimiters, only "
. What you’re doing is equivalent to:
perl -p -i.bak -e "'s/log/log,XYZ/g'" config.txt
so -w
is complaining “you gave me a string but it does nothing”.
The solution is to use double quotes instead:
perl -p -i.bak -e "s/log/log,XYZ/g" config.txt
or to simply leave them off, since there’s no metacharacters in this command that would be interpreted by cmd.exe
.
Addendum
cmd.exe
is just a really troublesome beast, for anybody accustomed to sh
-like shells. Here’s a few other common failures and workarounds regarding perl
invocation.
@REM doesn't work: perl -e"print" @REM works: perl -e "print" @REM doesn't work: perl -e "print \"Hello, world!\n\"" @REM works: perl -e "print qq(Hello, world!\n)"