# New Ticket Created by  "Carl Mäsak" 
# Please include the string:  [perl #126984]
# in the subject line of all future correspondence about this issue. 
# <URL: https://rt.perl.org/Ticket/Display.html?id=126984 >


<masak> m: sub foo($x) { say (* == $x)($_) given $x }; foo(1); foo(2)
<camelia> rakudo-moar cfb1f3: OUTPUT«True␤False␤»
* masak submits rakudobug

Examining the expression printed, it basically says "$x should be
numerically equal to itself" in a circuitous way. Since this is true
for any integer, I'd expect the program to print "True\nTrue\n".

Here's what's wrong:

<masak> m: sub foo($x) { say (* ~ $x)($_) given $x }; foo(1); foo(2)
<camelia> rakudo-moar cfb1f3: OUTPUT«11␤21␤»

That "1" there in "21" is from the first call to &foo -- it shouldn't
be there any more. But something in the WhateverCode (* ~ $x) holds
onto the old $x.

<masak> this bug brought to you by: Refactoring™
<lucasb> so... the WhateverCode is caching the first value it's *created* with?
<masak> yes, but only if it's in a given
<masak> m: sub foo($x) { say (* ~ $x)($x) }; foo(1); foo(2)
<camelia> rakudo-moar cfb1f3: OUTPUT«11␤22␤»

Reply via email to