I want to ask the user multiple questions. I have two types of questions: Y/N or filename input. I\'m not sure how to place this all into a nice if
structure. And I
One word: Abstraction.
The solution you currently chose does not scale well, and contains too much repeated code. We will write a subroutine prompt
that hides much of the complexity from us:
sub prompt {
my ($query) = @_; # take a prompt string as argument
local $| = 1; # activate autoflush to immediately show the prompt
print $query;
chomp(my $answer = );
return $answer;
}
And now a promt_yn
that asks for confirmation:
sub prompt_yn {
my ($query) = @_;
my $answer = prompt("$query (Y/N): ");
return lc($answer) eq 'y';
}
We can now write your code in a way that actually works:
if (prompt_yn("Do you want to import a list")){
my $list1 = prompt("Give the name of the first list file:\n");
if (prompt_yn("Do you want to import another gene list file")){
my $list2 = prompt("Give the name of the second list file:\n");
# if (prompt_yn("Do you want to import another gene list file")){
# ...
}
}
Oh, so it seems you actually want a while
loop:
if (prompt_yn("Do you want to import a list")){
my @list = prompt("Give the name of the first list file:\n");
while (prompt_yn("Do you want to import another gene list file")){
push @list, prompt("Give the name of the next list file:\n");
}
...; # do something with @list
}
The @list
is an array. We can append elements via push
.