I agree with you, but we can do better.

Usually I'm against all perl5 error messages, but I believe that this case is
different. I am sure that this is what most people attempt to do at some point.
I also know for sure that this is what I did a couple of times when I was
starting with Perl 6. I also remember many times people were asking this on the
channel.

So here's what I think:
* A FAQ entry can be added. I created a doc issue for this:
https://github.com/perl6/doc/issues/1300
* I think that it will be possible to add a compile-time error if you do
something like 「‘foo’[2]」. That is, if somebody attempts to index a string
literal, then we know for sure that it is wrong (… or at least, the error
message will do more good than harm).

On 2017-05-08 09:26:53, c...@zoffix.com wrote:
> 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: «Nil␤Nil␤(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 1␤␤Actually 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 1␤␤Actually 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.

Reply via email to