我有一个Perl子程序,它要求用户输入.无论输入的输入是否为有效输入,我都会在子程序内部执行检查.
我的子程序如下:
sub some_routine { print "Enter a number to select (1) Apple (2) Mango (3) grapes:" $value=STDIN; if($value =~ /[^1-3]/ ) { print "The input is not valid!"; print "Do you want to continue selecting a fruit again (Y or N)?"; $choice = STDIN; if( $choice eq "y") { ### I want to call the subroutine again to enter input ### } else { exit; } } }
那么如何递归子程序呢?
解决方法
要在Perl中递归调用子例程,只需从自身调用sub,就像在任何其他语言中一样:
sub factorial { my $num = shift; return 1 if $num < 2; return $num * factorial($num - 1); }
但是,您实际上并不想使用递归来“重复直到条件更改”方案.
那就是while循环用于:
my $valid; while (!$valid) { print "Enter something: "; my $data = <STDIN>; $valid = validate($data); print "Bzzt! Invalid - try again!\n" unless $valid; }