Search Perl pages
Professions, Sciences, Humanities, Business, ...
Text-based, GUI, Audio, Video, Keyboards, Mouse, Images,...
Conversions, tests, processing, manipulation,...
Integer, Floating point, Matrix, Statistics, Boolean, ...
Algorithms, Memory, Process control, Debugging, ...
Data storage, Integrity, Encryption, Compression, ...
Networks, protocols, Interprocess, Remote, Client Server, ...
Timing, Calendar and Clock, Audio, Video, Printer, Controls...
Management, Filtering, File & Directory access, Viewers, ...
Next: How can I call backticks without shell processing?
Strictly speaking, nothing. Stylistically speaking, it's not a good way to
write maintainable code because backticks have a (potentially humungous)
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.
Consider this line:
You haven't assigned the output anywhere, so it just wastes memory (for a
little while). Plus you forgot to check
$? to see whether the program even ran correctly. Even if you wrote
print `cat /etc/termcap`;
In most cases, this could and probably should be written as
system("cat /etc/termcap") == 0
or die "cat program failed!";
Which will get the output quickly (as its generated, instead of only at the
end ) and also check the return value.
system() also provides direct control over whether shell
wildcard processing may take place, whereas backticks do not.
Source: Perl FAQ: System Interaction
Copyright: Copyright (c) 1997 Tom Christiansen and Nathan Torkington.
Previous: Why doesn't open() return an error when a pipe open fails?
(Corrections, notes, and links courtesy of RocketAware.com)
Up to: Current Process Control
Search | About | Comments | Submit Path: RocketAware > Perl >
RocketAware.com is a service of Mib Software
Copyright 2000, Forrest J. Cavalier III. All Rights Reserved.
We welcome submissions and comments