```{index} single: refcount; Peta::XS function ``` ```{index} single: Peta::XS::refcount; Perl function ``` # refcount Reference count of the thing `$ref` points at. ## Synopsis ```perl use Peta::XS ':facts'; my $x; my $n = refcount(\$x); # 2 - see the observer effect below ``` ## What you get back An integer: how many references the runtime currently holds to the referent, at call time. Works on any referent - scalars, arrays, hashes, subs, aggregate elements. Croaks if the argument is not a reference; never dies otherwise. ## Observer effect The reference you pass in contributes one count of its own for the duration of the call, exactly as with `Devel::Refcount::refcount`. It is deliberately NOT subtracted: a lexical with no other references reports 2 (its pad slot plus your temporary reference). ## Examples ```perl my $x = 42; say refcount(\$x); # 2: pad slot + the \$x you just made my $r = \$x; say refcount($r); # 2: pad slot + $r (no extra temporary) my $r2 = \$x; say refcount($r); # 3: pad slot + $r + $r2 my @queue = ($r); say refcount($r); # 4: the array element counts too ## leak hunting: a cache entry still pinning an object my $obj = SomeClass->new; $cache{key} = $obj; say refcount(\$obj); # 3 - the cache holds one; forget it and delete $cache{key}; # the count drops back to 2 ``` ## See also - [`value_slots`](value_slots) - which representations the value holds. - [`magic`](magic) - what is attached to the variable. - `Scalar::Util::refaddr` / `builtin::refaddr` - identity, not count.