in reply to CGI Tables

You're very close, and I like that you're using the implied map that CGI.pm invokes on array references. Since you're putting all your results on one page of html, I'll assume that there is no problem getting the whole DBI query at once.

print $html_page->table( $html_page->Tr( [ map {$html_page->td($_)} @{$sth->fetchall_arrayref()} ] ) )

The fetchall_arrayref function returns a reference to an AoA of all the results of the db query. Mapping the td() function over the dereferenced result gives an array of rows. Then we apply Tr to a reference to that array ( the square brackets) to get html row tags applied to each.

After Compline,
Zaxo

Replies are listed 'Best First'.
Re: Re: CGI Tables
by sch (Pilgrim) on Sep 01, 2002 at 03:42 UTC
    Excellent, I had a feeling that it would be simple. As you can probably guess I've got to get my head round map - obviously very useful, so I'll just have to persevere. Thanks for your help, sch
Re: Re: CGI Tables
by sch (Pilgrim) on Sep 08, 2002 at 22:56 UTC

    OK, to expand on this a little - and I hope you can bear with me on this as I'm trying to get my head round this still.

    I now want to expand on this to include items not returned by the fetch from the database, e.g. to include a record count as the first item on each line of the table

    I've worked out (after some head scratching) that I can use the following:

    print $html_page->table( $html_page->Tr( [ map {$html_page->td($record_count++).$html_page->td($_)} @{$ +sth->fetchall_arrayref()} ] ) );

    which works fine - but I was wondering if there is a more efficient way of doing this?

      That looks fine. So long as the tables are small enough to avoid memory pressure, that is probably as efficient as you need it to be.

      The construction is done without waiting for I/O, all in memory. The memory used to collect the string for printing is immediately released.

      What sort of efficiency do you need? If you're not sure, try profiling and benchmarking to see what is costing you. Don't optimize ahead of the facts.

      After Compline,
      Zaxo

        ok, maybe efficiency isn't the most appropriate word there - basically I just wanted to check that was the best way of coding it, but thanks for checking it over