in reply to lazy map question

I would suggest pulling out the creation of the hash out of the print statement. Create a lexical variable. Since you are using the range twice, it might make sense to assign that to a lexical.
my @values = [ 0 .. $#array ]; my %labels = map { $_, $array[$_] } @values; print $q->p( $q->scrolling_list( -name => 'list_input', -values => \@values, -size => 1, -labels => \%labels, ) );