X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FSQL%2FAbstract.pm;h=b3c4581559a9e79d6b1a95f712e4cb5271ec553d;hb=90aab162eed6811e18e80f05d1c43c012b54daef;hp=80345485d70747256db2d969fb2df0c1ca8fdbc7;hpb=ba566dc378d0c4c7dac535acc986e9ded83f2e19;p=scpubgit%2FQ-Branch.git diff --git a/lib/SQL/Abstract.pm b/lib/SQL/Abstract.pm index 8034548..b3c4581 100644 --- a/lib/SQL/Abstract.pm +++ b/lib/SQL/Abstract.pm @@ -871,23 +871,23 @@ sub _refkind { my ($self, $data) = @_; my $suffix = ''; my $ref; + my $n_steps = 0; - # $suffix = 'REF' x (length of ref chain, i. e. \\[] is REFREFREF) while (1) { - # blessed references are considered like scalars - last if blessed $data; - $suffix .= 'REF'; - $ref = ref $data; - - last if $ref ne 'REF'; + # blessed objects are treated like scalars + $ref = (blessed $data) ? '' : ref $data; + $n_steps += 1 if $ref; + last if $ref ne 'REF'; $data = $$data; } - return $ref ? $ref.$suffix : - defined $data ? 'SCALAR' : - 'UNDEF'; + my $base = $ref || (defined $data ? 'SCALAR' : 'UNDEF'); + + return $base . ('REF' x $n_steps); } + + sub _try_refkind { my ($self, $data) = @_; my @try = ($self->_refkind($data));