Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
Perl::Critic::PPerl::CUsercContributednPerluDocumentationtBacktickOperators(3)

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(3)

NAME | AFFILIATION | DESCRIPTION | CONFIGURATION | NOTES | AUTHOR | COPYRIGHT

Want to link to this manual page? Use this URL:
<https://www.freebsd.org/cgi/man.cgi?query=Perl::Critic::Policy::InputOutput::ProhibitBacktickOperators&sektion=3&manpath=FreeBSD+12.1-RELEASE+and+Ports>

home | help