#!/usr/bin/perl use warnings; use strict; use Tk; use Tk::widgets qw( Label Optionmenu ); my $mw = tkinit; my $selectedDir; my @files; my $path = '.'; my @myArr = qw(foo bar); my $myFile; my ($Label1, $OptMenu1, $Label2, $OptMenu2); $Label2 = $mw->Label(-text => "level2 "); # no -options: we'll let $OptMenu1 configure -options $OptMenu2 = $mw->Optionmenu( -textvariable => \$myFile, ); $Label1 = $mw->Label(-text => "level1 "); $OptMenu1 = $mw->Optionmenu( -textvariable => \$selectedDir, # -command is invoked when the widget is # allocated and when a selection is made: -command => sub { # redirect the output of ls(1) to /dev/null unless # you want stderr output on the console @files = `ls $path/$selectedDir 2>/dev/null`; #foreach (@files) { chomp() } chomp @files; # chomp() take a LIST warn 'configure $OptMenu2'; # who needs a debugger? $OptMenu2->configure(-options => \@files); }, -options => \@myArr, ); $Label1->grid($OptMenu1, $Label2, $OptMenu2); MainLoop;