But on Windows (no test for single quote, because irrelevant and works OK):
>perl -E "system $^X, '-E', 'say for @ARGV', 1, qq(\x22), 2"
Tracing the script with Process Monitor
shows that the system call becomes...
C:\Strawberry\perl\bin\perl.exe -E "say for @ARGV" 1 " 2
It seems that multi-arg system
doesn't quote arguments that already have quotes... maybe some poor application of DWIM principles or a work-around for keeping compatibility with old scripts written before the automating quoting was introduced.