#!/usr/bin/perl use strict; use warnings; use CGI; use CGI::Carp qw(fatalsToBrowser); $CGI::DISABLE_UPLOADS = 1; use Data::Dumper; use HTML::Template::Compiled; package Widget::Select; use Moose; has 'tuple' => (is => 'rw'); # ID, Text, ... has 'name' => (is => 'rw'); has 'selection' => (is => 'rw'); sub set_tuple { my $self = shift; $self->{tuple} = [@_] if @_ % 2 == 0; } sub as_form { my $self = shift; my @l = @{$self->{tuple}}; # non destructive my $o = '' . "\n"; return $o; } package main; my $q = CGI->new; my $sel = $q->param('sel'); my @files = <*.pl>; my $wdgt = Widget::Select->new( name => 'sel' ); $wdgt->set_tuple( map { $_, $files[$_] } 0..$#files ); $wdgt->selection($sel); print $q->header; my $t = HTML::Template::Compiled->new( filehandle => *DATA); $t->param(wdgt => $wdgt, message => Dumper $q); print $t->output; __DATA__
<%= message %>