prompting multiple questions to user (yes/no & file name input)

后端 未结 3 1853
遥遥无期
遥遥无期 2021-02-15 15:43

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

3条回答
  •  迷失自我
    2021-02-15 16:13

    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.

提交回复
热议问题