Brian Keefer wrote: > Vicki Brown wrote: > > # Problem - we want code to validate input. > > # In this particular case, the possible input values are > > # blastx, blastn, blastp, tblastx, tblastn > > # so it looks like a job for a regexp > > > > while (<>){ > /t?blast[xn]/ && next; > /blastp/ && next; > die "$_ : not valid"; > } This (and all the other answers using regexp) has the problem that it doesn't take care of the *rest* of the input string. Is leading whitespace allowed? Trailing garbage? Separated from the name by whitespace? The above example would also allow `XXXtblastx<<>>W#$$@Q#%$DR' as program name, right? > I think that's closer to what the holy camel tome wants of us. For a `switch'-like approach, yes. But the problem is the regexp. I think this is a case where the "holy book of the owl" is more appropriate. It teaches you how to construct a RE that really matches what you want. And it will open your eyes for cases were you just *thought* your RE would match perfectly but didn't consider the exotic cases. So I'll give it a shot: use Term::ReadLine; $term = new Term::ReadLine "name of application"; while(1) { $_ = $term->readline("Enter program name: "); last if m/^ \s* ( blast[xnp] | tblast[xn] ) \s* $/x; print "Error in program name, try again.\n"; } $program = $1; (assuming that leading and trailing whitespace is OK, but no other garbage allowed). Roland -- perl -e '@_=@ARGV;$_="@_[-3,-2,-1]";s{([@{[$_[-1]]}])}#($0=$1. ${[qw[>$%, ()%{&", &"=, |}+&" *]]}[$@++])=~y/*=->$%&"(-){-}+,/ lusternohack /,$0#eg; print; ' -- Roland Giersig, JAPH. ==== Want to unsubscribe from Fun With Perl? ==== Well, if you insist... Send mail with body "unsubscribe" to ==== fwp-request@technofile.org