[Pdx-pm] for vs foreach question

Thomas Keller kellert at ohsu.edu
Wed Dec 10 13:04:20 CST 2003


Yup, I get it now.
Thanks

On Dec 10, 2003, at 10:55 AM, Tom Phoenix wrote:

> On Wed, 10 Dec 2003, Thomas Keller wrote:
>
>> I thought the "foreach" keyword was a synonym for the "for" keyword.
>
> Yes, but the loops are distinct. A foreach loop is not a for loop:
>
>     for (1..10) { print "$_\n" }	# a foreach loop, in disguise
>     foreach (1..10) { print "$_\n" }	# the same
>
>     for ($_=1; $_<=10; $_++) { print "$_\n" }		# a true for loop
>     foreach ($_=1; $_<=10; $_++) { print "$_\n" }	# the same
>
> The difference is the semicolons inside the parens: If you've got two
> semicolons, you've got a true for loop. No semicolons, it's a foreach.
>
>> for (my $i = 0; $i < scalar @$aref; ++$i) {
>> 	for (my $j = 0; $j < scalar @{$aref->[$i]}; ++$j) {
>
> Here, $i and $j are index numbers which count from 0 up to the maximum
> needed.
>
>> foreach my $i (@$aref) {
>> 	foreach my $j (@{$aref->[$i]}) {
>
> But here, $i is an element of the array @$aref, so it's not a number. 
> That
> breaks the second loop's list expression, too.
>
> I think you want something like this for those last two lines:
>
>     foreach my $i (0..$#$aref) {
> 	foreach my $j (0..$#{$aref->[$i]}) {
>
> Those use the same upper bound as the true for loop above.
>
> Does that fix things for you? Good luck with it!
>
> --Tom Phoenix
>




More information about the Pdx-pm-list mailing list