Examines the value of EXPR, expecting it to be a reference, and returns a string giving information about the reference and the type of referent. If EXPR is not specified, $_ will be used.
If the operand is not a reference, then the empty string will be returned. An empty string will only be returned in this situation.
refis often useful to just test whether a value is a reference, which can be done by comparing the result to the empty string. It is a common mistake to use the result of
refdirectly as a truth value: this goes wrong because
0(which is false) can be returned for a reference.
If the operand is a reference to a blessed object, then the name of the class into which the referent is blessed will be returned.
refdoesn't care what the physical type of the referent is; blessing takes precedence over such concerns. Beware that exact comparison of
refresults against a class name doesn't perform a class membership test: a class's members also include objects blessed into subclasses, for which
refwill return the name of the subclass. Also beware that class names can clash with the built-in type names (described below).
If the operand is a reference to an unblessed object, then the return value indicates the type of object. If the unblessed referent is not a scalar, then the return value will be one of the strings
IO, indicating only which kind of object it is. If the unblessed referent is a scalar, then the return value will be one of the strings
REGEXP, depending on the kind of value the scalar currently has. Beware that these built-in type names can also be used as class names, so
refreturning one of these names doesn't unambiguously indicate that the referent is of the kind to which the name refers.
The ambiguity between built-in type names and class names significantly limits the utility of
ref. For unambiguous information, use Scalar::Util::blessed() for information about blessing, and Scalar::Util::reftype() for information about physical types. Use the isa method for class membership tests, though one must be sure of blessedness before attempting a method call.