> such as the ability to embed a shell command in backquotes and get its output easily.
Unless thing have changed in the last 20 years - and they might well have! - that was also a very error-prone tool.
For example, filenames may have spaces in them, but most don't. Experience shows that people forget about that possibility during development and testing. But backticks parse the string after interpolation, causes the spaces to be interpreted as distinct terms.
Here's an example using backticks to call md5sum to compute the MD5 of the empty file "test.txt":
% touch "test.txt"
% perl
$fname = 'test.txt';
$a = `md5sum $fname`;
print("Got: $a\n");
^D
Got: 8b8db3dfa426f6bdb1798d578f5239ae test.txt
Looks good, right? Now try it with "test me.txt":
% touch "test me.txt"
% perl
$fname = 'test me.txt';
$a = `md5sum $fname`;
print("Got: $a\n");
md5sum: test: No such file or directory
md5sum: me.txt: No such file or directory
This leads to all sort of fun (in the sarcastic sense) when people use variable names with shell metacharacters:
% touch 'test.txt|echo hello'
% perl
$fname = 'test.txt|echo hello';
$a = `md5sum $fname`;
print("Got: $a\n");
Got: hello
There are ways to avoid this, but as the FAQ points out at
https://perldoc.perl.org/perlfaq8#How-can-I-call-backticks-w... , the solution is to avoid using backticks. (The example there is of passing an arbitrary search string to grep, without dealing with shell expansion.)
You might be interested to know Julia's take on the same operation. It parses the backtick-quoted string itself (without a shell), and handles interpolation in a shell-like way, with awareness of the underlying variable (eg, string, or enumerating a list or Cartesian product of strings). The result is a Cmd object, which can be passed to other functions to describe how to use or process the Cmd.
See https://docs.julialang.org/en/v1/manual/running-external-pro... .