As personal preference I do try hard not to use system() calls in my Perl
scripts because Perl can do everything itself with built-ins or
modules. It's my opinion that while easier in terms of coding a lot of the
time using system() calls or back-tics it is harder, albeit most likely not
too much, on the host machine to call outside programs to perform certain
functions. So, I avoid doing so as often as I can.
Therefore, use the built-ins. To do file manipulations use File::Copy
which gives the ability to move(), copy() files. Use Cwd.pm to get current
working directory (getcwd()), and use use chdir() to change directory. You
can use perldoc File::Copy, perldoc -f chdir, and perldoc Cwd to get
documentation on these functions.
So, I agree with Peter in his last couple of paragraphs and put my 2 cents
in that imho, it is better to use perl built-ins as much as possible.
- Jim
At 07:30 12.23.2001 -0800, Peter Cornelius wrote:
>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
> programs.
>
>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
>
> chdir EXPR
> 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
>use File::Copy;
>
>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.
>
>Good luck,
>Peter C.
>
>--SNIP--
>Hello all,
> 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.
>
>
>--
>To unsubscribe, e-mail: [EMAIL PROTECTED]
>For additional commands, e-mail: [EMAIL PROTECTED]
- Jim
Philosophy is for those who have nothing better to do than wonder
why philosophy is for those who have nothing better to do than...
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]