Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?
 
PerlMonks  

Re^3: Mutable foreach list? (types of for)

by ikegami (Pope)
on Jan 11, 2007 at 18:16 UTC ( #594208=note: print w/ replies, xml ) Need Help??


in reply to Re^2: Mutable foreach list?
in thread Mutable foreach list?

The following are all implemented differently:

  • foreach (EXPR; EXPR; EXPR) ("C-style for loop", an augmented while loop.)
  • foreach (EXPRX..EXPRY) (A range and nothing else.)
  • foreach (reverse CONSTX..CONSTY) (A constant range, preceded by reverse.)
  • foreach (reverse EXPRX..EXPRY) (A range, preceded by reverse.)
  • foreach (@ARRAY) (An array and nothing else.)
  • foreach (reverse @ARRAY) (Reverse of an array and nothing else.)
  • foreach (reverse LIST) (Reverse of any list that doesn't fit the above patterns.)
  • foreach (LIST) (Any list that doesn't fit the above patterns.)

You might find the difference between foreach (@ARRAY) and foreach (LIST) interesting.

{ my $x = 1; my $y = 4; # The initial values are saved. my @a; foreach ($x..$y) { push @a, $_; $y++; } print("@a\n"); # 1 2 3 4 } { my $x = 1; my $y = 4; # The initial values are saved. my @a; foreach (reverse $x..$y) { push @a, $_; $x--; } print("@a\n"); # 4 3 2 1 } { my @a = (1, 2, 3, 4); my $i = 5; # Loops "while (pass_num < @a)". # In this case, that means loop forever. foreach (@a) { # Loops "while (pass_num < @a)" push(@a, $i++); if (@a == 20) { push(@a, '...'); last; } # Avoid infinite loop. } print("@a\n"); # 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ... } { my @a = (1, 2); my @b = (3, 4); my $i = 5; # Creates a list at the start of the # loop and iterates over that list. # In this case, elements are added to @b, # but not to the list on the stack, so # it loops 4 times. foreach (@a, @b) { push(@b, $i++); } print("@a @b\n"); # 1 2 3 4 5 6 7 8 }

The difference between
foreach (reverse CONSTX..CONSTY)
and
foreach (reverse EXPRX..EXPRY)
is that the list in built at compile time in the former.

>perl -le "for (1..2) { for (reverse 1..3) { print; $_=5; } }" 3 2 1 5 5 5 >perl -le "for (1..2) { for (reverse 1..($x=3)) { print; $_=5; } }" 3 2 1 3 2 1


Comment on Re^3: Mutable foreach list? (types of for)
Select or Download Code

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://594208]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others perusing the Monastery: (6)
As of 2015-07-03 22:24 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (57 votes), past polls