http://www.perlmonks.org?node_id=246416


in reply to Constructing HTML tables with CGI.pm

you want Tr () to output your hash. so, each key/value pair inside the hash must be encapsulated inside a td () - the loop to use therefore is "map", not "for".

for is only used for the sideeffects of the corresponding block that is applied to each of the elements of the list. especially the for does not return anything meaningful.

the map takes a list, and returns a list - and that is what you want. you specify the transform of each element in the list in the map block. consider this:

use strict; use warnings; use CGI qw/:standard/; my %hosts = ('a' .. 'z'); cgiOut (); sub cgiOut { my $q = new CGI; print $q->header( "text/plain" ), $q->start_html( -title=>"Apache Stats for \$hostname", -bgcolor=>"#ffffff"), $q->h2( "Apache Stats for \$hostname" ), $q->hr, $q->table( { -border=>"1", -width=>"100%" }, $q->Tr({}, [map { td([$_, $hosts{$_}]) } sort keys %hosts])), $q->end_html; }

HTH