On Mon, Jul 14, 2008 at 08:32:52PM +0100, Paul LeoNerd Evans wrote: > sub is_1ref > { > my ( undef, $name ) = @_; > my $count = refcount($_[0]); > ... > } > > The $object in the first code creates a second reference, so you have to > subtract 1, whereas the @_ array seems special and doesn't have that > side-effect.
Until you take a reference to it, or various other things (I cant' remember the canonical list, but push is in it, whereas shift doesn't seem to be (at least a simple shift)): $ perl -MDevel::Peek -e 'sub f {Dump $_[0]; warn [EMAIL PROTECTED]; Dump $_[0]; } f(\$v)' SV = RV(0x817e18) at 0x800168 REFCNT = 1 FLAGS = (ROK) RV = 0x800f18 SV = NULL(0x0) at 0x800f18 REFCNT = 2 FLAGS = () ARRAY(0x800f00) at -e line 1. SV = RV(0x817e18) at 0x800168 REFCNT = 2 FLAGS = (ROK) RV = 0x800f18 SV = NULL(0x0) at 0x800f18 REFCNT = 2 FLAGS = () It would be dangerous to rely on this reference counting behaviour remaining the same. Nicholas Clark