On Mon, 10 Oct 2016 06:05:10 -0700, alex.jakime...@gmail.com wrote: > Code: > say “hello”[2] > > Result: > Index out of range. Is: 2, should be in 0..0 > in block <unit> at -e line 1 > > Actually thrown at: > in block <unit> at -e line 1 > > > > IRC discussion starting here: > https://irclog.perlgeek.de/perl6/2016-10-10#i_13370830
I don't get why we throw in this case at all. We don't do it with any of the Positionals: <Zoffix_> m: say $_[42] for 1..1, (1,), [1,], (1,).Seq <camelia> rakudo-moar 60f898: OUTPUT: «NilNil(Any)Nil» Other than Blob and Uni, which I'd say also break the consistency: <Zoffix_> m: say "".NFD[1] <camelia> rakudo-moar 60f898: OUTPUT: «Index out of range. Is: 1, should be in 0..-1 in block <unit> at <tmp> line 1Actually thrown at: in block <unit> at <tmp> line 1» <Zoffix_> m: say Blob.new[1] <camelia> rakudo-moar 60f898: OUTPUT: «Index out of range. Is: 1, should be in 0..-1 in block <unit> at <tmp> line 1Actually thrown at: in block <unit> at <tmp> line 1» The throwage breaks the "everything is a 1-item list" idiom, as I can't safely do $x[1], because it'll explode any time $x is not a non-Stringy Positional. I tried to remove the throwage, but it's blocked by several 6.c tests. And regardless of that, I'm -1 on this ticket. Right now $x[1] throws X::OutOfRange on non-Positionals (even though it shouldn't), but the proposed fix for this ticket would see the possibility of yet another exception in another special case being thrown, all for the sake that *someone new to the language* *assumes* Perl 6 can index strings. IMO such special casing will be a hassle to more normal Perl 6 users than a helpful tip to new Perl 6 users. Just recall how often the Perl-5-ism exceptions get thrown when writing normal Perl 6 code.