use HTML::Seamstress; my $html_file = 'unroll_select.html'; my $tree = HTML::Seamstress->new_from_file($html_file); my $player_list = [ {id => 1, screen_name => 'bob'}, {id => 2, screen_name => 'joe'}, {id => 3, screen_name => 'jim'}, {id => 4, screen_name => 'hal'} ]; $tree->unroll_select ( select_label => 'player_select', option_data_iter => sub { shift @{$player_list} }, option_value => sub { my $row = shift; $row->{id} }, option_content => sub { my $row = shift; $row->{screen_name} }, ); print $tree->as_HTML;