$CHILD_ERROR $?
$OS_ERROR $!
$EXTENDED_OS_ERROR $^E
$EVAL_ERROR $@
** Global symbols, my(), and local()**
There is one symbol table for each package (which is why global symbols are really package global symbols).
There is no typeglob associated with a lexical variable and a lexical variable can refer only to a scalar, an array, a hash, or a code reference. Since perl 5.6, it can also refer to a file glob.
With 'use vars()', you are making an entry in the symbol table, and you are telling the compiler that you are going to be referencing that entry without an explicit package name.
With my(), NO ENTRY IS PUT IN THE SYMBOL TABLE. The compiler figures out at compile time which my() variables are the same as each other, and once you hit runtime you cannot go looking those variables up in the symbol table.
local() creates a temporal-limited package-based scalar, array, hash, or glob — when the scope of the definition is exited at runtime, the previous value (if any) is restored. References to such variable are also global…only the value changes (This is what cause variable suicide).
my() create a lexically-limited non-package-based scalar, array, or hash — when the scope of definition is exited at compile-time, the variable ceases to be accessible. Any references to such a variable at runtime turn into unique anonymous variables on each scope exit.





