退出使用 IO::Prompter 要求数字的 while 循环
Quit while loop that asks for numbers with IO::Prompter
在使用 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";
}
}
-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";
}
}
在使用 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";
}
}
-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";
}
}