Excellent teaser. It parses because it is legal perl syntax of course! In this context it means print a reference to a reference to the return value of m// divided by a reference to a reference to a reference to the return value of m//. Wow that's a mouthful. In code form:
print //; # prints 1, scalar return val of match null in $_ (alw
+ays true)
print \//; # SCALAR(0x....)
print \\//; # ditto
print \\\//; # ditto
print \\\\//; # ditto
etc...
# thus what you are saying is divide the scalar value
# of one memory reference by another
print \\// / \\\//
ref div ref
It does not evaluate to 0 however as you imply. I get 0.999998046573592 on Win32 as we are dividing two closely allied memory addresses by each other. The first one evaled logically gets the smaller memory address (stack theory) so the result should always be a number just less than 1 - the bigger the memory you have (and the closer to out of memory you are) the closer to one it will be. You can demonstrate my theory with this snippet
$a = \1; # first ref in lower mem
$b = \1; # second ref in slightly higher mem
print $b/$a;
# prints 1.00000684833673
tachyon
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.
|