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

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

Write "my $error = close $fh;" instead of "close $fh;".

## NAME

Perl::Critic::Policy::InputOutput::RequireCheckedClose - Write "my $error = close $fh;" instead of "close $fh;".

## AFFILIATION

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

## DESCRIPTION

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

```
    my $error = close $filehandle;                   # ok
    close $filehandle or die "unable to close: $!";  # ok
    close $filehandle;                               # not ok
    use autodie qw< :io >;
    close $filehandle;                               # 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.
