Цикл выхода, который запрашивает числа с IO :: Prompter - PullRequest
0 голосов
/ 03 марта 2019

При использовании IO :: Prompter я спрашиваю только цифры в качестве ввода.Это работает.Однако я не могу найти элегантный способ отойти от подпрограммы, если я введу что-то вроде 'quit'.

В документах сказано что-то вроде:

while (my $cmd = prompt '>', -fail=>'quit') {
    ...
}

НоЯ не смог реализовать это и попробовал следующее, которое не работает должным образом (я не могу выйти).

#!/usr/bin/perl
use strict;
use warnings;
use IO::Prompter;

my $ask = prompt "Do you want to show numbers?", -yn;
print "You entered: $ask\n";
if ( $ask eq 'y' ) {
    showNumbers();
}
else {
    print "You said: no\n";
}

sub showNumbers {
    while ( prompt -num, 'Enter a number'){
        print "$_\n";
    }
}

1 Ответ

0 голосов
/ 03 марта 2019

-DEF может использоваться для предоставления значения по умолчанию, которое не является действительным ответом, что позволяет нам различать действительный ответ и просто нажимать Enter.

sub showNumbers {
    while (1) {
        my $num = prompt 'Enter a number', -num, -DEF => "";

        # $num is a weird value that true even for an empty string, so
        # we must separately check for false (meaning EOF) and empty string.
        last if !$num || $num eq "";

        print "$num\n";
    }
}
...