in reply to eval'ing strange scalar

+\//+\//+\//
is the same as
+ \( // ) + \( // ) + \( // )

The leading (unary) "+" is a no-op used to affect parsing in some situations, but it does nothing here.

\ is the reference taking operator. When used as a number, a reference returns the referenced memory address.

// is a match operator (m/.../).

It sums the memory addresses of the values returned by the three calls to the match op.

And since it returns a number, passing it to eval does nothing but return the same number.

I can't fathom find a use for it.

Update: Added a couple of details.

Replies are listed 'Best First'.
Re^2: eval'ing strange scalar
by hbm (Hermit) on Jan 23, 2009 at 18:42 UTC

    Your explanation is fantastic; referring to \ as "the reference taking operator" really helps. Thanks!

    I don't envision a real use for it either, just experimenting.

    Update: Below was my experimentation. As mentioned earlier, it proved to be not portable as the references lead to different numbers on different systems.

    use strict; use warnings; $/=q{+\//}; # my silly scalar for(@{[31,60,66,68,73]}){ # magic numbers ($-=>$_)=($_=>$!); # set $- to magic number and $_ to empty $_.=$/while--$-; # append silly scalar to $_ <magic number> times $_=eval; # eval it for an eight-digit number... s+......$++; # whose first two digits push(@_,$_) # are the ASCII for '!', 'A', 'H', 'J', 'P' }die map{chr}@_[eval join(q{,},3,1,4,2,0)]=>10; # die with 'JAPH!\n'