Quote protection finally clicks
[email protected] (Sean McAfee) Sat, 1 Nov 2025 11:49:13 +0800
| Newsgroups | perl.perl6.users |
|---|---|
| Message-ID | <CANan03bg_5hp+RxG0X6U5va+btfqEoDV=21_V4FeGASNxt7qzg@mail.gmail.com> |
I wrote a short Raku script that connects to my VPN provider using a command piactl. In my first version I used an approach similar to one I've used many times before, calling out to a shell and being very careful about shell escaping issues: run 'bash', '-c', 'piactl disconnect && piactl set region "$1" && piactl connect', '--', $region; I happened to browse the Raku docs about quoting constructs, and something finally clicked about quote protection within « » quotes. It works like a shell! run «bash -c 'piactl disconnect && piactl set region "$1" && piactl connect' -- "$region"»; It's just as safe as the first version, but a bit more readable. At this point I realized that I really didn't need the shell after all. run in sink context raises an error, so I could just as well do that at every step as for the overall chain of calls: run <piactl disconnect>; run «piactl set region "$region"»; run <piactl connect>; And the quote protection I was so happy to have figured out is slightly less readable than the plain vanilla alternative: run <piactl set region>, $region; I'm glad it's there in case I need it in the future, though. I'd use it if there were additional arguments, eg: run «piactl set region "$region" --force»;