Provided by: libperl-critic-perl_1.130-1_all bug

NAME

       Perl::Critic::Policy::InputOutput::ProhibitBacktickOperators - Discourage stuff like
       "@files = `ls $directory`".

AFFILIATION

       This Policy is part of the core Perl::Critic distribution.

DESCRIPTION

       Backticks are super-convenient, especially for CGI programs, but I find that they make a
       lot of noise by filling up STDERR with messages when they fail.  I think its better to use
       IPC::Open3 to trap all the output and let the application decide what to do with it.

           use IPC::Open3 'open3';
           $SIG{CHLD} = 'IGNORE';

           @output = `some_command`;                      #not ok

           my ($writer, $reader, $err);
           open3($writer, $reader, $err, 'some_command'); #ok;
           @output = <$reader>;  #Output here
           @errors = <$err>;     #Errors here, instead of the console

CONFIGURATION

       Alternatively, if you do want to use backticks, you can restrict checks to void contexts
       by adding the following to your .perlcriticrc file:

           [InputOutput::ProhibitBacktickOperators]
           only_in_void_context = 1

       The purpose of backticks is to capture the output of an external command.  Use of them in
       a void context is likely a bug.  If the output isn't actually required, "system()" should
       be used.  Otherwise assign the result to a variable.

           `some_command`;                      #not ok
           $output = `some_command`;            #ok
           @output = `some_command`;            #ok

NOTES

       This policy also prohibits the generalized form of backticks seen as "qx{}".

       See perlipc for more discussion on using "wait()" instead of "$SIG{CHLD} = 'IGNORE'".

       You might consider using the "capture()" function from the IPC::System::Simple module for
       a safer way of doing what backticks do, especially on Windows.  The module also has a safe
       wrapper around "system()".

AUTHOR

       Jeffrey Ryan Thalhammer <jeff@imaginative-software.com>

COPYRIGHT

       Copyright (c) 2005-2011 Imaginative Software Systems.  All rights reserved.

       This program is free software; you can redistribute it and/or modify it under the same
       terms as Perl itself.  The full text of this license can be found in the LICENSE file
       included with this module.

perl v5.24.1                    Perl::Critic::Policy::InputOutput::ProhibitBacktickOperators(3pm)