sta*_*NCT 3 recursion perl subroutine
我有一个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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
那么如何递归子程序呢?
Dav*_*man 10
要在Perl中递归调用子例程,只需从自身调用sub,就像在任何其他语言中一样:
sub factorial {
my $num = shift;
return 1 if $num < 2;
return $num * factorial($num - 1);
}
Run Code Online (Sandbox Code Playgroud)
但是,您实际上并不想使用递归来"重复直到条件更改"方案.
这是while循环的用途:
my $valid;
while (!$valid) {
print "Enter something: ";
my $data = <STDIN>;
$valid = validate($data);
print "Bzzt! Invalid - try again!\n" unless $valid;
}
Run Code Online (Sandbox Code Playgroud)
这没有理由使用递归.一个简单的while循环就行了.
my $input_valid = 0;
while( !$input_valid ) {
print "Enter some input: ";
my $input = <STDIN>;
$input_valid = validate_input( $input );
}
Run Code Online (Sandbox Code Playgroud)
如果validate_input返回0,则循环将重复.