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! |