BrowserUk has asked for the wisdom of the Perl Monks concerning the following question:

Perlfunc lists the following possible return values from ref:

SCALAR ARRAY HASH CODE REF GLOB LVALUE

Is that all of them? I've got a vague recollection of either encountering or seeing reference to a 'REGEX' type?

Any others?


Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
"Too many [] have been sedated by an oppressive environment of political correctness and risk aversion."

Replies are listed 'Best First'.
Re: Missing ref() return possibility?
by toolic (Bishop) on May 16, 2008 at 01:45 UTC
    ref lists these:
    SCALAR ARRAY HASH CODE REF GLOB LVALUE FORMAT IO VSTRING Regexp
Re: Missing ref() return possibility?
by rhesa (Vicar) on May 16, 2008 at 01:42 UTC
    The types you list are the basics. All other cases are covered by "If the referenced object has been blessed into a package, then that package name is returned instead."

    For regular expressions, this is demonstrated by:

    use Scalar::Util qw/blessed/; $q=qr//; print ref($q); print blessed($q); __END__ Regexp Regexp

      What your code implies but isn't quite explicit about is that qr() actually gives back a blessed reference to a scalar.

      use Scalar::Util qw/blessed reftype/; my $q = qr//; print 'ref: ', ref($q), "\n"; print 'blessed: ', blessed($q), "\n"; print 'reftype: ', reftype($q), "\n"; __END__ ref: Regexp blessed: Regexp reftype: SCALAR

      There's some more about this in How can I tell if an object is based on a regex?

Re: Missing ref() return possibility?
by Fletch (Bishop) on May 16, 2008 at 01:47 UTC

    qr// will return an instance that ref returns Regexp for; perhaps that's what you're remembering?

    The cake is a lie.
    The cake is a lie.
    The cake is a lie.

Re: Missing ref() return possibility?
by runrig (Abbot) on May 16, 2008 at 01:44 UTC
    Did you try perl -e 'print ref(qr/abc/)' ??
Re: Missing ref() return possibility?
by graff (Chancellor) on May 16, 2008 at 05:36 UTC
    It's good to remember that when ref() is given something that is not a reference to anything, it returns an empty string. (It never seems to return "undef", even when you give it nothing at all.)