---
name: "Perl::Critic::Policy::InputOutput::RequireCheckedOpen"
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::RequireCheckedOpen"
---

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

Write "my $error = open $fh, $mode, $filename;" instead of "open $fh, $mode, $filename;".

## NAME

Perl::Critic::Policy::InputOutput::RequireCheckedOpen - Write "my $error = open $fh, $mode, $filename;" instead of "open $fh, $mode, $filename;".

## AFFILIATION

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

## DESCRIPTION

The perl builtin I/O function `"open"` returns a false value on failure. That value should always be checked to ensure that the open was successful.

```
    my $error = open( $filehandle, $mode, $filename );                  # ok
    open( $filehandle, $mode, $filename ) or die "unable to open: $!";  # ok
    open( $filehandle, $mode, $filename );                              # not ok
    use autodie;
    open $filehandle, $mode, $filename;                                 # ok
```

You can use autodie, Fatal, or Fatal::Exception to get around this.  Currently, autodie is not properly treated as a pragma; its lexical effects aren't taken into account.

## CONFIGURATION

If you create a module that exports `"autodie"` you can tell this policy about it with the `"autodie_modules"` setting:

```
    [InputOutput::RequireCheckedSyscalls]
    autodie_modules = My::Thing
```

## AUTHOR

Andrew Moore \<amoore@mooresystems.com\>

## ACKNOWLEDGMENTS

This policy module is based heavily on policies written by Jeffrey Ryan Thalhammer \<jeff@imaginative-software.com\>.

## COPYRIGHT

Copyright (c) 2007-2011 Andrew Moore.  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.
