icon Top 9 categories map      RocketAware > Perl >

What's wrong with using backticks in a void context?

Tips: Browse or Search all pages for efficient awareness of Perl functions, operators, and FAQs.


Search Perl pages


By activity
Professions, Sciences, Humanities, Business, ...

User Interface
Text-based, GUI, Audio, Video, Keyboards, Mouse, Images,...

Text Strings
Conversions, tests, processing, manipulation,...

Integer, Floating point, Matrix, Statistics, Boolean, ...

Algorithms, Memory, Process control, Debugging, ...

Stored Data
Data storage, Integrity, Encryption, Compression, ...

Networks, protocols, Interprocess, Remote, Client Server, ...

Hard World
Timing, Calendar and Clock, Audio, Video, Printer, Controls...

File System
Management, Filtering, File & Directory access, Viewers, ...


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 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:

    `cat /etc/termcap`;

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.
Next: How can I call backticks without shell processing?

Previous: Why doesn't open() return an error when a pipe open fails?

(Corrections, notes, and links courtesy of RocketAware.com)

[Overview Topics]

Up to: Current Process Control

Rapid-Links: Search | About | Comments | Submit Path: RocketAware > Perl > perlfaq8/What_s_wrong_with_using_backtick.htm
RocketAware.com is a service of Mib Software
Copyright 2000, Forrest J. Cavalier III. All Rights Reserved.
We welcome submissions and comments