CARVIEW |
- #ref EXPR
- #ref
-
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.
ref
is 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 ofref
directly as a truth value: this goes wrong because0
(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.
ref
doesn't care what the physical type of the referent is; blessing takes precedence over such concerns. Beware that exact comparison ofref
results against a class name doesn't perform a class membership test: a class's members also include objects blessed into subclasses, for whichref
will return the name of the subclass. Also beware that class names can clash with the built-in type names (described below). Use theisa
method to test class membership of a class name or blessed object, after ensuring it is one of these things. Alternatively, theisa
operator can test class membership without checking blessedness first.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
ARRAY
,HASH
,CODE
,FORMAT
, orIO
, indicating only which kind of object it is. If the unblessed referent is a scalar, then the return value will be one of the stringsSCALAR
,VSTRING
,REF
,GLOB
,LVALUE
, orREGEXP
, depending on the kind of value the scalar currently has. But note thatqr//
scalars are created already blessed, soref qr/.../
will likely returnRegexp
. Beware that these built-in type names can also be used as class names, soref
returning 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 may limit the utility of
ref
, but in practice, such clashes rarely occur unless intentionally engineered. For unambiguous information, use "blessed" in builtin for information about blessing, and "reftype" in builtin for information about physical types. But beware that the physical type returned byreftype
does not indicate how a blessed object is meant to be used, and the appropriate dereference operations for an object (whether to access the blessed structure directly, or via an overload) will be described by the documentation for the object class.
Perldoc Browser is maintained by Dan Book (DBOOK). Please contact him via the GitHub issue tracker or email regarding any issues with the site itself, search, or rendering of documentation.
The Perl documentation is maintained by the Perl 5 Porters in the development of Perl. Please contact them via the Perl issue tracker, the mailing list, or IRC to report any issues with the contents or format of the documentation.