You are viewing the version of this documentation from Perl 5.14.1. View the latest version
$OS_ERROR
$ERRNO
$!

If used numerically, yields the current value of the C errno variable, or in other words, if a system or library call fails, it sets this variable. This means that the value of $! is meaningful only immediately after a failure:

	if (open my $fh, "<", $filename) {
		# Here $! is meaningless.
		...
    }
    else {
		# ONLY here is $! meaningful.
		...
		# Already here $! might be meaningless.
    }
    # Since here we might have either success or failure,
    # here $! is meaningless.

The meaningless stands for anything: zero, non-zero, undef. A successful system or library call does not set the variable to zero.

If used as a string, yields the corresponding system error string. You can assign a number to $! to set errno if, for instance, you want "$!" to return the string for error n, or you want to set the exit value for the die() operator.

Mnemonic: What just went bang?