If used in a numeric context, yields the current value of errno, with all the usual caveats. (This means that you shouldn't depend on the value of
$! to be anything in particular unless you've gotten a specific error return indicating a system error.) If used in a string context, yields the corresponding system error string. You can assign 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?)
Also see "Error Indicators".