I just re-read Synopsis 9, which covers PDL-related actions and array slicing, and came to the conclusion that either (A) there's a hole in the syntax as it is lain out, (B) I lack sufficient understanding of what has been thought out so far, or (C) that part of the language definition isn't finished yet.
Is the perl6 expression @a[4; 0..5]; a 1x6 array (probably correct)? Or a 6 array (probably not correct)? If the former, how do you specify that you want the latter? There's a significant difference between the two -- for example, if '4' is some list expression that happens to have just one element, you don't want the whole shape of the output array to change. The problem is the near-universal wart that scalars are not merely lists with but a single element, so you need to be able to tell the difference between a dimension that exists but has size 1, and a dimension that doesn't exist. (In perl5, all arrays are one-dimensional, so the issue is sidestepped by the presence of scalar/list context.) Perl5/PDL solves the problem with 'extra-parenthesis' syntax in slicing, and with zero-size dimensions in operators like range() [no relation to perl6 range operators] that take a dimension size list. Examples: $a( 4, 0:5 ); # This perl5/PDL slice is a 1x6-array $a( (4), 0:5 ); # This perl5/PDL slice is a 6-array $a->range($xy,[1,3]); # This perl5/PDL range is a 1x3-array $a->range($xy,[0,3]); # This perl5/PDL range is a 3-array The extra parens only remove the dimension if they would otherwise be no-ops. It is not (yet) clear to me whether the extra parens syntax is a good solution for perl 6 slices.