If used numerically, yields the current value of the C
errno variable, 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 an 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?)
Also see "Error Indicators".