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