First, it's not being called in list context. That means something else. I call this the multiple argument form.
When you use the single argument form, system expects a shell command and will launch a shell to execute the command*, so
system('echo $PATH');
is the same as
system('/bin/sh', '-c', 'echo $PATH');
The shell expands $PATH, and in turn, does
system('echo', '/foo:/bar');
which is quite different than your
system('echo', '$PATH');
You must either use the shell
system('echo $PATH');
system('/bin/sh', '-c', 'echo $PATH');
or you must do what it would do
system('echo', $ENV{PATH});
My code is supposed to set $PATH, then run a command on the same line, in the same shell.
You should start by launching a shell, then!
system('PATH=/foo prog arg');
Or not. This is something you can do yourself quite easily.
local $ENV{PATH} = '/foo'; system('prog', 'arg');
* — As an optimisation, Perl avoids launching a shell when it's obvious that the shell isn't needed.
In reply to Re: System() in list mode?
by ikegami
in thread System() in list mode?
by 1337John
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |