Maybe it's that it's 9:00 pm on a Friday and I'd rather be at home cooking some dinner and sipping a beer, but I just can't figure this one out:

Below is HTML::Mason code that generates a list of users within each group

The array ref is populated by a SQL query that I've verified returns all of the relevant information in the format with users grouped by group_name.

$_->[0] = group_id $_->[1] = group_name $_->[2] = user_name

So what I'm trying to do is output the group name only once (in a table) for all of the users who belong to that group.

% for (my $i = 0; $i < @{$all_groups}; $i++) { % my $j = $i; Start loop: $i=<% $i %>, $j=<% $j %><br> % while ($all_groups->[$i][0] == $all_groups->[$j][0]) { % % # for ($j = $i; $all_groups->[$i][0] == $all_groups->[$j][0]; $j++ +) { % die if ($j > 2000); $i=<% $i %>, $j=<% $j %>, user=<% $all_groups->[$j][2] %><br> % $j = $j + 1; % } After loop: $i=<% $i %>, $j=<% $j %><br> % $i = $j; End loop: $i=<% $i %>, $j=<% $j %><br> % }

Minus the Mason crap it's this:

for (my $i = 0; $i < @{$all_groups}; $i++) { my $j; print STDOUT "Start loop: \$i=$i, \$j=j\n"; for ($j = $i; $all_groups->[$i][0] == $all_groups->[$j][0]; $j++) +{ die if ($j > 2000); # Code to keep Apache from crashing as +Perl runs amuck from my various solutions print STDOUT "\$i=$i, \$j=$j, user=" . $all_groups->[$j][2]. " +\n"; } print STDOUT "After loop: \$i=$i, \$j=$j\n"; $i = $j; }

What's happening, however, is that the loop skips a number at most but not all breaks between groups. In effect, an extra iteration is occuring during the for{} loop that means the test fails but $j gets incremented by 1. Now I can't see why this code isn't doing what it's supposed to, so maybe I've beens staring at it for too long, but I'd really appreciate it if anyone can point out my mistake.

TIA

P.S. Here's some sample output:

Start loop: $i=0, $j=0 $i=0, $j=0, user=mash@4anything.com $i=0, $j=1, user=rblaustein@4anything.com $i=0, $j=2, user=sstarr@4anything.com $i=0, $j=3, user=lzogby@4anything.com $i=0, $j=4, user=sshankman@4anything.com $i=0, $j=5, user=rnafziger@4anything.com $i=0, $j=6, user=smondeaux@4anything.com $i=0, $j=7, user=rkaiser@4anything.com $i=0, $j=8, user=mkarsch@4anything.com $i=0, $j=9, user=katkins@4anything.com $i=0, $j=10, user=sgreene@4anything.com $i=0, $j=11, user=arabschnuk@4anything.com $i=0, $j=12, user=klange@4anything.com $i=0, $j=13, user=vs@4anything.com $i=0, $j=14, user=msinger@4anything.com $i=0, $j=15, user=csultanik@4anything.com $i=0, $j=16, user=cweber@4anything.com $i=0, $j=17, user=earbuckle@4anything.com $i=0, $j=18, user=tgill@4anything.com $i=0, $j=19, user=jgrishaver@4anything.com $i=0, $j=20, user=mkost@4anything.com After loop: $i=0, $j=21 End loop: $i=21, $j=21 Start loop: $i=22, $j=22 $i=22, $j=22, user=dan_derosa@es.adp.com $i=22, $j=23, user=finlay_waugh@es.adp.com $i=22, $j=24, user=deborah_barron@es.adp.com After loop: $i=22, $j=25 End loop: $i=25, $j=25 Start loop: $i=26, $j=26 $i=26, $j=26, user=kirshenbaumda@aetna.com $i=26, $j=27, user=poseyll@aetna.com $i=26, $j=28, user=dubejw@aetna.com $i=26, $j=29, user=flanaganm1@aetna.com $i=26, $j=30, user=wallra@aetna.com After loop: $i=26, $j=31 End loop: $i=31, $j=31 Start loop: $i=32, $j=32 $i=32, $j=32, user=alice.stroup@aig.com

In reply to Nested For Loop giving me extra iterations by jreades

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.