next up previous contents
Next: File Test Operators Up: Interacting with the Operating Previous: Introduction   Contents


The backquote (`) operator

Suppose we wish to print a piece of text to a report indicating the time that the report was prepared. A convenient way to achieve that goal might be to capture the output of the operating system's date command. Using the filehandle method described above, we could do something like the following:
     open(DATE,"date|");
     $date = <DATE>;
     chomp $date;
If there was a large amount of output to be read, and processing would be done line by line, the pipe mechanism is probably the method of choice; but when the desired output consists of only a few lines, perl offers a technique long used in shell scripts. When you surround text with backquotes (`), that text is interpreted as an operating system command, and the backquoted expression returns the output of the command. In a scalar context, the entire output, possibly with embedded newlines, is returned. In an array context, each line of output becomes one element in the returned array. The previous example could be written as
     $date = `date`;
     chomp $date;
or even further shortened to
     chomp($date = `date`);
Keep in mind that when you use backquotes, you are running a separate program under the operating system, not just invoking a function internal to perl. In this particular example, the perl function localtime, used in a scalar context will acheive the same result without running a separate program:
     $date = localtime;
Efficiency issues like this should not unduly concern you. On the other hand, if use of a feature like backquotes seems to be making your program run too slowly, it is generally worthwhile to see if the functionality you're looking for is built into the perl interpreter.

Variable interpolation takes place inside of backquotes, so there's a great deal of flexibility in the way commands can be constructed. The following command uses the diamond operator to list all the files in the current directory, and then uses backquotes to read the output of the UNIX file command to determine if the file is a JPEG or GIF image:

     while(<*>){
        if(`file $_` =~ /JPEG|GIF/){
            print "$_ is an image file\n";
        }
     }
As an alternative to backquoting, the qx quoting operator (Section 3.2) performs a similar function.


next up previous contents
Next: File Test Operators Up: Interacting with the Operating Previous: Introduction   Contents
Phil Spector 2002-10-18