$arrayref.ref?

2005-07-30 Thread Ingo Blechschmidt
Hi,

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.ref;# Ref or Array?
say $arrayref.isa(Ref); # true or false?
say $arrayref.isa(Array);   # false or true?

say +$arrayref;   # 3 or error?
say $arrayref + 1;# 4 or error?


--Ingo

-- 
Linux, the choice of a GNU | Black holes result when God divides the
generation on a dual AMD   | universe by zero.  
Athlon!|



Re: $arrayref.ref?

2005-07-30 Thread Larry Wall
On Sat, Jul 30, 2005 at 02:14:52PM +0200, Ingo Blechschmidt wrote:
: Hi,
: 
: 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.ref;# Ref or Array?

Array.

: say $arrayref.isa(Ref); # true or false?

False, though tied($arrayref).isa(Ref) is probably true.

: say $arrayref.isa(Array);   # false or true?

True.

: say +$arrayref;   # 3 or error?
: say $arrayref + 1;# 4 or error?

Both work.

To the first approximation, refs to scalar non-object values must be
explicitly derefed.  But refs to non-scalar containers are considered
objects so they will happily autoderef one level.  It's possible we
may find a way to relax the former constraint, but if so, it would
go back to one-level deref, not all levels.

Larry


Re: $arrayref.ref?

2005-07-30 Thread Aankhen
On 7/30/05, Larry Wall [EMAIL PROTECTED] wrote:
 On Sat, Jul 30, 2005 at 02:14:52PM +0200, Ingo Blechschmidt wrote:
 : say $arrayref.isa(Ref); # true or false?
 
 False, though tied($arrayref).isa(Ref) is probably true.

In that case, how do you check if something is a ref?  `if (tied($foo))`?

Aankhen