use strict; use warnings; use Data::Dumper; # for debug use constant { # regexes to check and control input BLANK_LINE => qr{ \A \s* \Z }xms, NON_SEQ => qr{ [^[:alpha:]] }xms, # could be ATCG or IUPAC }; use constant USER_PROMPTS_IN_ORDER => qw(first secundus third 4th); my %prompted_seqs; # collected info on prompted sequences entered by user print "please enter DNA sequences: \n"; PROMPT: for my $prompt (USER_PROMPTS_IN_ORDER) { print " $prompt sequence: "; my $input = ; chomp $input; print(" stop getting sequences: user request \n"), last PROMPT if $input =~ BLANK_LINE; print(" stop getting sequences: bad input: '$input' \n"), last PROMPT if $input =~ NON_SEQ; $prompted_seqs{$prompt}{seq} = $input; $prompted_seqs{$prompt}{len} = length $input; } print Dumper \%prompted_seqs; # for debug print "valid entered sequences in order of prompt: \n"; print " $_: $prompted_seqs{$_}{seq} ($prompted_seqs{$_}{len}) \n" for grep { exists $prompted_seqs{$_} } USER_PROMPTS_IN_ORDER; print "valid entered sequences in order of increasing length: \n"; print " $_: $prompted_seqs{$_}{seq} ($prompted_seqs{$_}{len}) \n" for sort { $prompted_seqs{$a}{len} <=> $prompted_seqs{$b}{len} } keys %prompted_seqs ;