There are several methods for executing external commands from Perl. The 2
most common would be 'system()' and backticks '``'. You should probably
read the 'perldoc -f system' for detailed info. The main difference between
backticks and system is where the commands output goes and where the return
value goes. With system the output is not redirected for you and the return
code goes to $!. With backticks the output is returned to the program and
the return code goes to $?.
You should probably try 'perldoc -q backtic' to get more info on this whole
topic. perlfaq8 has this to say.
What's wrong with using backticks in a void context?
Strictly speaking, nothing. Stylistically speaking, it's
not a good way to write maintainable code because
backticks have a (potentially humongous) return value, and
you're ignoring it. It's may also not be very efficient,
because you have to read in all the lines of output,
allocate memory for them, and then throw it away. Too
often people are lulled to writing:
`cp file file.bak`;
And now they think "Hey, I'll just always use backticks to
run programs." Bad idea: backticks are for capturing a
program's output; the system() function is for running
There's more but I wont repost it here.
All this being said, you should probably look into how perl could do most of
these things for you without using the shell. The 'cd' shell command is
built in with 'chdir'. perldoc -f chdir reads
Changes the working directory to EXPR,
and the cp stuff is in a module called File::Copy
This is a standard module that you can get at by putting
at the top of your script. Then somewhere you can
copy ("source", "dest") or die "with a useful message: $!\n";
Guess what I'm going to say next? perldoc File::Find will tell you more.
I'm writing a common gateway interface that will call I need to
issue several shell commands.
(cp, cd, and cd .., and maybe others). Any assistance would be
greatly appreciated. How can a call a shell other than bash.