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

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

Return value of flagged function ignored.

## NAME

Perl::Critic::Policy::InputOutput::RequireCheckedSyscalls - Return value of flagged function ignored.

## AFFILIATION

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

## DESCRIPTION

This performs identically to InputOutput::RequireCheckedOpen/Close except that this is configurable to apply to any function, whether core or user-defined.

If your module uses Fatal, Fatal::Exception, or autodie then any functions wrapped by those modules will not trigger this policy.  For example:

```
    use Fatal qw(open);
    open my $fh, $filename;  # no violation
    close $fh;               # yes violation
    use autodie;
    open $filehandle, $mode, $filename;   # no violation
```

Currently, autodie is not properly treated as a pragma; its lexical effects aren't taken into account.

## CONFIGURATION

This policy watches for a configurable list of function names.  By default, it applies to `"open"`, `"print"`, `"say"` and `"close"`.  You can override this to set it to a different list of functions with the `"functions"` and `"exclude_functions"` settings.  To do this, put entries in a *.perlcriticrc* file like this:

```
    [InputOutput::RequireCheckedSyscalls]
    functions = open opendir read readline readdir close closedir
```

We have defined a few shortcuts for creating this list

```
    [InputOutput::RequireCheckedSyscalls]
    functions = :defaults opendir readdir closedir
    [InputOutput::RequireCheckedSyscalls]
    functions = :builtins
    [InputOutput::RequireCheckedSyscalls]
    functions = :all
```

The `":builtins"` shortcut above represents all of the builtin functions that have error conditions (about 65 of them, many of them rather obscure).

You can require checking all builtins except `"print"` by combining the `"functions"` and `"exclude_functions"`:

```
    [InputOutput::RequireCheckedSyscalls]
    functions = :builtins
    exclude_functions = print
```

This is a lot easier to read than the alternative.

The `":all"` is the insane case: you must check the return value of EVERY function call, even `"return"` and `"exit"`.  Yes, this "feature" is overkill and is wasting CPU cycles on your computer by just existing.  Nyah nyah.  I shouldn't code after midnight.

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
```

## CREDITS

Initial development of this policy was supported by a grant from the Perl Foundation.

This policy module is based heavily on policies written by Andrew Moore \<amoore@mooresystems.com\>.

## AUTHOR

Chris Dolan \<cdolan@cpan.org\>

## COPYRIGHT

Copyright (c) 2007-2011 Chris Dolan.  Many 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.
