Actually, Zoffix pointed out to me on IRC that it's a bug; say is supposed to call .gist on the Junction itself. Until that gets fixed, it's probably a good idea to use `say $foo.perl` or `put $foo.perl` instead.
The justification is that `say` is often used "to dump iffy stuff that doesn't quite stringify", and that "say all()" not outputting anything is rather bad. What exactly "say $a-junction" does isn't currently part of 6.c spec and we're still trying to figure out how it should behave. We're not sure if "put $a-junction.gist" will stay the way it is, either. Sorry for the improper information before - Timo On 25/02/18 17:04, Timo Paulssen wrote: > > That was the behaviour before those commits. It was explicitly changed > to how it works now, I believe. > > > On 25/02/18 16:54, yary wrote: >> Should "say" handle junctions and wrap them with ".gist?" Seems like >> it ought to, but maybe that introduces problems. >> >> -y >> >> On Sun, Feb 25, 2018 at 11:48 AM, Timo Paulssen <t...@wakelift.de >> <mailto:t...@wakelift.de>> wrote: >> >> That's right. Say will also call .gist on what you pass to it, >> but say doesn't declare that it handles junctions, so before it >> can call .gist on what it gets, it will be handled by the >> auto-threader, so you'll get say, and therefor .gist, called on >> everything inside the junction and the result will be re-combined >> into a junction again. >> >> >> On 25/02/18 12:05, yary wrote: >>> I don't have Rakudo handy, is the answer to "how to make >>> junctions show as Sean expects" >>> >>> say $junction.gist ; >>> >>> ? >>> >>> -y >>> >>> On Sat, Feb 24, 2018 at 7:27 PM, Timo Paulssen <t...@wakelift.de >>> <mailto:t...@wakelift.de>> wrote: >>> >>> I'm pretty sure you're running up against this change in rakudo: >>> >>> https://github.com/rakudo/rakudo/blob/master/docs/ChangeLog#L203 >>> <https://github.com/rakudo/rakudo/blob/master/docs/ChangeLog#L203> >>> > + Made print/say/put/note handle junctions correctly >>> [07616eff] >>> > [9de4a60e][8155c4b8][3405001d] >>> >>> the relevant commits being: >>> >>> https://github.com/rakudo/rakudo/commit/07616eff >>> <https://github.com/rakudo/rakudo/commit/07616eff> >>> > Make print/say/put/note handle junctions correctly >>> > >>> > - well, for some value of correctly >>> > - introducing helper method Junction.THREAD >>> > - to be used if you have a multi with **@foo as a signature >>> > - print/say/put/note now return Junction if given a Junction >>> >>> https://github.com/rakudo/rakudo/commit/3405001d >>> <https://github.com/rakudo/rakudo/commit/3405001d> >>> > Make put/print "a",any(<b c d>) work >>> > >>> > - we already had a candidate for handling a Junction, but >>> not if part >>> of a List >>> > - simplified the code to let List.join do the hard work >>> > - which automatically takes care of the Junction issue >>> >>> You're not getting junctions "stringified as one alternative >>> per line", >>> rather you're getting the default auto-threading that >>> junctions do and >>> the say is being run once per value in the junction. >>> >>> Hope that clears things up >>> - Timo >>> >>> >> >> >