# New Ticket Created by Patrick R. Michaud # Please include the string: [perl #122948] # in the subject line of all future correspondence about this issue. # <URL: https://rt.perl.org/Ticket/Display.html?id=122948 >
The .infinite method on Any is designed to return one of three values: True - known to be infinite False - known to be finite Nil - finite-ness not yet known or determined The "Nil" (undefined) result is often provided for lists that are being evaluated lazily... rather than force eager evaluation of the list, the list can simply return an undefined value meaning "I don't know yet if I'm finite or infinite". With that in mind, something about splicing Captures isn't properly honoring .infinite. Here's an illustration: 03:08 <pmichaud> r: sub g(*@v) { say @v.infinite; }; g(4..*); # correct 03:08 <camelia> rakudo-{parrot,moar} fd017a: OUTPUT«True» 03:08 <pmichaud> r: sub g(*@v) { say @v.infinite; }; g('a',4..*); # correct 03:08 <camelia> rakudo-{parrot,moar} fd017a: OUTPUT«Nil» 03:08 <pmichaud> r: sub g(*@v) { say @v.infinite; }; g(|('a',4..*)); # correct 03:08 <camelia> rakudo-{parrot,moar} fd017a: OUTPUT«Nil» 03:08 <pmichaud> r: sub g(*@v) { say @v.infinite; }; g(|(4..*)); # incorrect 03:08 <camelia> rakudo-{parrot,moar} fd017a: OUTPUT«False» The last case shows the problem -- when a Capture has a single infinite argument, splicing it into the slurpy paramete loses its finite nature. Either "True" or "Nil" would be acceptable for this last answer, but "False" is the absolute wrong result. This is ultimately the cause of the bug described in RT #118867 dealing with the [max] reduction operator. Pm