My mnemonic is "x (one thing) is for scalars, xx (many things) is for lists". Using that, there's seldom any confusion.
The reason Perl 6 makes the distinction is that (unlike Perl 5) it *has to*. Perl 5 does context-based dispatch, whereas Perl 6 does argument-based dispatch. We greatly prefer the latter, and it's an either-or situation, so two operators it is. // Carl On Fri, Dec 20, 2013 at 4:52 AM, Richard Hainsworth <rich...@rusrating.ru> wrote: > OK x not xx. > > The doubling of operators is confusing. > > Richard > > On 12/19/2013 10:01 PM, Jonathan Worthington wrote: >> >> On 12/19/2013 3:47, Richard Hainsworth wrote: >>> >>> Initially I though the following was a bug, but now I'm not sure. >>> >>> I got these results >>> >>> perl6 -v >>> This is perl6 version 2013.09 built on parrot 5.5.0 revision 0 >>> $ perl6 >>> > say '0' xx 4 >>> 0 0 0 0 >> >> Are you sure you didn't want the x (string repetition) operator, instead >> of xx (list repetition)? >> >>> > print '0' xx 4 >>> 0000> print 's' ~ ('0' xx 4) >>> s0 0 0 0> >>> >>> >>> I'm not sure why the elements of the expansion are padded with a trailing >>> space in one context but not in another. >>> >> print calls .Str, say calls .gist. >> >>> I wasn't sure whether this is the specified behaviour. >> >> It is. >> >>> If it is how can it be turned off? >> >> Call .Str or .gist on the argument to print/say as needed. >> >> I suspect that the problem will be resolved by using the x operator >> instead of xx, however. :-) >> >> /jnthn >> >> >