---
name: "Perl::Critic::Policy::InputOutput::ProhibitBacktickOperators"
section: "3pm"
platform: "linux"
package: "perl-perl-critic"
version: "1.156-3"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/Perl::Critic::Policy::InputOutput::ProhibitBacktickOperators"
---

# Perl::Critic::Policy::InputOutput::ProhibitBacktickOperators(3pm)

Discourage stuff like "@files = \`ls $directory\`".

## 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.
