http://www.perlmonks.org?node_id=794673


in reply to I should've known better!

Yes, well, I should have known better too. :-)

In fact, in Perl 6, the equivalent loop:

for @text -> $line { ... }
makes $line a read-only alias to catch just this sort of mixup. You'd write:
for @text <-> $line { ... }
(note the double-ended arrow) to get the read-write semantics. But it's not the default. Perl 6 is all about picking sane defaults while not preventing you from doing the sorts of powerful things you can do in Perl 5.

Replies are listed 'Best First'.
Re^2: I should've known better!
by GrandFather (Saint) on Sep 11, 2009 at 03:01 UTC

    In Perl 5 my $var; ... for $var (...) {...} doesn't alter the contents of the $var global to the for loop. Is that true for both the -> and <-> variants of the Perl 6 for loop illustrated above?

    I presume you can for @array <-> my $var {...} in Perl 6 to make the scope of $var obvious.


    True laziness is hard work
      In Perl 5 my $var; ... for $var (...) {...} doesn't alter the contents of the $var global to the for loop. Is that true for both the -> and <-> variants of the Perl 6 for loop illustrated above?
      Yes.
      presume you can for @array <-> my $var {...}, in Perl 6 to make the scope of $var obvious.
      No, you can't. Both arrows actually introduce a signature, and my in a signature doesn't make sense.

      I used to write -> my $x too, but got used to omitting the my rather quickly :-).

      Perl 6 - links to (nearly) everything that is Perl 6.