Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation
 
PerlMonks  

Re: System() in list mode?

by ikegami (Pope)
on Oct 17, 2011 at 21:12 UTC ( #932011=note: print w/ replies, xml ) Need Help??


in reply to System() in list mode?

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.


Comment on Re: System() in list mode?
Select or Download Code
Re^2: System() in list mode?
by 1337John (Initiate) on Oct 18, 2011 at 15:24 UTC
    Thanks for the reply. The explanation wasn't the best but eventually I got it to work this way.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://932011]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (6)
As of 2014-09-19 02:40 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    How do you remember the number of days in each month?











    Results (129 votes), past polls