$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 vari- able. This means that the value of $! is meaning- ful only immediately after a failure: if (open(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. In the above 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 sys- tem 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".