#!/usr/bin/perl use strict; use warnings; package Widget::Select; use Moose; use overload '""' => \&as_form; 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; use CGI; my $q = CGI->new; my $wdgt = Widget::Select->new( name => 'select_excel' ); $wdgt->set_tuple( map { $_, $_ } <*.pl> ); my $message = 'Choose file to process ...'; if ($q->param('.submit')) { my $choosen = $q->param('select_excel'); # qx ( /path/to/script.pl $choosen ); $message = $choosen . ' was processed.'; } print $q->header, $q->start_html, $message, $q->hr, $q->start_form, $wdgt, $q->submit, $q->end_form, $q->end_html;