use strict; use warnings; use Term::ReadLine; # I need this under windows: $ENV{TERM}=undef; my $term=Term::ReadLine->new("test"); print "Please enter a pattern:"; my $pattern = ; chomp $pattern; my @files = glob($pattern); print "there are ",scalar @files," different possibilities.\n"; my $choosen = ''; $term->Attribs->{completion_function} = sub { my ($text, $line, $start) = @_; return grep { /^$text/i } @files ; }; while ( defined ( $_ = $term->readline( 'choose>') ) ) { # a blank bare line is entered? redo the loop next if /^$/; if ($_=~/.*$/){ chomp $_; $choosen = $_; last; } } print "You choosen [$choosen]\n"; #### prompt>perl term-readline001.pl Please enter a pattern:*.jpg there are 23 different possibilities. choose> # TAB TAB display all possibilities apod20100415.jpg cat.jpg city.jpg earth.jpg file.jpg file0.jpg file3.jpg file4.jpg file5.jpg file6.jpg file7.jpg file8.jpg flowers.jpg hacking-team-011509362-ff2f66c6-e452-4109-8bfb-6d4499c2bd5e.jpg kawasaki.jpg kid.jpg mandelbrot_set_color_zoom_by_zeno333-d4va5l8.jpg moon.jpg PICT0034.JPG romantic.jpg serfandolweb.jpg sunrise.jpg umbrella.jpg # if i press just ENTER nothing happens choose> choose> choose> choose> choose>file # i press 'f' and after TAB: it display all 'file*' files file.jpg file0.jpg file3.jpg file4.jpg file5.jpg file6.jpg file7.jpg file8.jpg choose>file4.jpg # i enter '4' and TAB completes into the only one matching You choosen [file4.jpg ] # done! the program exit prompt>