Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine
 
PerlMonks  

system and backticks

by littlemonk (Sexton)
on Jun 07, 2010 at 13:38 UTC ( #843492=perlquestion: print w/ replies, xml ) Need Help??
littlemonk has asked for the wisdom of the Perl Monks concerning the following question:

what is the functional difference between system() and backtics anybody plz tell me ?

Comment on system and backticks
Re: system and backticks
by moritz (Cardinal) on Jun 07, 2010 at 13:40 UTC
    What piece of difference wasn't clear to you, after reading the extensive documentation?
    Perl 6 - links to (nearly) everything that is Perl 6.
Re: system and backticks
by JavaFan (Canon) on Jun 07, 2010 at 13:48 UTC
    what is the functional difference between system() and backtics
    The return value.

    For details, see the manual pages.

Re: system and backticks
by cdarke (Prior) on Jun 07, 2010 at 14:03 UTC
    backticks (or qx) is a form of output redirection. It enables the calling program to capture the standard output of the called program. The disadvantage of this is that the output being captured could be very large, possibly exceeding the memory allowance of the calling program, causing it to crash. A more controlled way of capturing output is to use a pipe with open.

    system does not capture any output directly, it runs the command which will inherit the parent's standard streams.
Re: system and backticks
by rjt (Deacon) on Jun 07, 2010 at 15:20 UTC

    For those that learn by example:

    my $cmd = 'echo "Hello World" && exit 2'; my $sys_result = system($cmd); print "system() returned `$sys_result'; \$? = $?\n"; my $qx_result = `$cmd`; print "qx// returned `$qx_result'; \$? = $?\n";

    Output:

    Hello World System returned `512'; $? = 512 qx// returned `Hello World '; $? = 512

    In a nutshell, with system, the command's output will not be captured (note how "Hello World\n" goes to the terminal), and you get the exit status as the return value. With backticks, the command's stdout is captured, and you get that output as your return value. In both cases, the child error is available with $?.

    If you need to capture standard error, you will need to redirect it to standard output by appending 2>&1 to your command, or perhaps use the completely different IPC::Open3.

    Please review How do I post a question effectively? and feel free to ask a more specific question if none of these replies are telling you what you need to know.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://843492]
Approved by marto
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others lurking in the Monastery: (6)
As of 2014-10-01 08:21 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    How do you remember the number of days in each month?











    Results (390 votes), past polls