Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

I have a hash containing the sub categories from a pipe delimited flat file DB which I am displaying by doing this:
foreach $i (sort keys %subcat) { print "<TR><TR><A HREF=\"offers\.cgi\?$category\&$i\"><img src=\"\ +.\.\/Media\/redaro\.gif\" width=13 height=13 border=0 ". "alt=\"\"><\/A> <A HREF=\"otestnu\.cgi\?$category\&$i\">$i</A> + ($subcat{$i})</TD></TR>\n" }
Which is displaying the subcat and the number of offers in each in brackets fine BUT I want to be able to count them out 3 per table row.

Is there a way of doing this?

Any help would be greatly appreciated
Thanks in advance.

<img src=\"\.\.\/Media\/redaro\.gif\" width=13 height=13 border=0 alt=\"\"><\/A> $i ($subcat{$i}) \n" }
Replies are listed 'Best First'.
Re: 3 per row
by Russ (Deacon) on May 10, 2000 at 02:48 UTC

    Based partially on btrott's answer (above), I wanted to provide a solution
    which would keep the table balanced (i.e. put 3 td's on each row - even if
    the last row wouldn't otherwise be full).

    I've basically become anal about uninitialized value warnings, so if you
    don't care about them, you can ditch the ternary operators...

    my %subcat = (Foo => 3, Bar => 2, Baz => 10, Quux => 1); my @Keys = keys %subcat; while (my $Temp = [splice @Keys, 0, 3]){ print "<tr>\n"; print defined @$Temp[0] ? " <td>@$Temp[0] ($subcat{@$Temp[0]})</td> +\n" : " <td></td>\n"; print defined @$Temp[1] ? " <td>@$Temp[1] ($subcat{@$Temp[1]})</td> +\n" : " <td></td>\n"; print defined @$Temp[2] ? " <td>@$Temp[2] ($subcat{@$Temp[2]})</td> +\n" : " <td></td>\n"; print "</tr>\n"; last unless @Keys; }

    A note about the code: I opted here to simply print three lines rather than
    use an inner for (0..2) loop. The net cost is two lines of code, but it
    made the purpose of that section of code very obvious. I consider it worth
    the cost...

    Russ

Re: 3 per row
by httptech (Chaplain) on May 10, 2000 at 00:12 UTC
    See my answer to the previous question here.
Re: 3 per row
by Anonymous Monk on May 10, 2000 at 00:12 UTC
    Sorry about the long line of code - here it is
    in a shorter form
    <CODE> foreach $i (sort keys %subcat) { print "
Re: 3 per row
by Anonymous Monk on May 10, 2000 at 00:13 UTC
    Sorry about the long line of code - here it is
    in a shorter form
    foreach $i (sort keys %subcat) { print "<TR><TR><A HREF=\"offers\.cgi\? $category\&$i\"><img src=\"\.\.\/Media\/redaro\.gif\" width=13 height=13 border=0 alt=\"\"><\/A> <A HREF=\"otestnu\.cgi\?$category\&$i\">$i</A> ($subcat{$i}) </TD></TR>\n" }
Re: 3 per row
by btrott (Parson) on May 10, 2000 at 00:18 UTC