It's not that perl doesn't keep the quotes, perl never gets them. The quotes are just one way to prevent the shell from splitting the text into multiple arguments. The same effect can be achieved with backslash:
./foo.pl -a one -b two -c 1\ 2\ 3 -d done
The effect is on both cases a string of 1, space, 2, space, 3. You can also put quotes around the other arguments that don't contain spaces, the quotes are still not part of the arguments passed to the program.
If you want to pass arguments to the shell, you can just put quotes around all. Or you can put a backslash before every special shell character.