Hi,

Larry Wall wrote:
> On Sat, Jul 30, 2005 at 02:14:52PM +0200, Ingo Blechschmidt wrote:
> : http://use.perl.org/~autrijus/journal/25337:
> : > deref is now 0-level; $x = 3; $y = \$x; $y++. # now an exception
> : 
> :     my $arrayref = [1,2,3];
[...]
> :     say $arrayref.isa("Ref");     # true or false?
> 
> False, though tied($arrayref).isa("Ref") is probably true.

hm? I've probably misunderstood something, but I don't see any tied
variables in the snippet above -- so why should we use tied() to get at
the non-autodereffing ref of an autodereffing ref?

I thought tieing is a way to intercept further assignments -- i.e.
    $some_tied_variable = ...;
will call user-defined code.

But this is not the case when dealing with simple references, right?

    my $arrayref = [1,2,3];
    # $arrayref contains an autodereffing Ref of Array now.
    $arrayref = 42;
    # $arrayref contains a simple Num now.
    # The [1,2,3], which was previously stored in $arrayref,
    # does not "notice" the new assignment.

Thus I propose we use tied() only to get at the underlying real contents
of a tied variable, and use
get_non_autodereffing_ref_out_of_autodereffing_ref() (with a shorter
name, of course), to convert an autodereffing ref to a
non-autodereffing ref.

    my $arrayref = [1,2,3];
    $arrayref.isa(Ref);      # false
    tied($arrayref);         # error/undef
    get_non_autodereffing_ref_out_of_autodereffing_ref($arrayref).isa(Ref);
                             # true

Opinions?


--Ingo

-- 
Linux, the choice of a GNU | To understand recursion, you must first
generation on a dual AMD   | understand recursion.  
Athlon!                    |

Reply via email to