0

如何进行无限输入循环,直到他在 Perl 中退出,因为即使在输入 quit 或 q 后我也无法正确退出代码。非常感谢您的帮助。

do
 {
 &ipdiscover;
 print "enter q or quit to exit";
  my $input=<>;
  chomp($input);
  if($input=="quit")
  exit;
}until(($input eq "quit")||($input eq "q"));
4

1 回答 1

5

&ipdiscover– 永远不要调用这样的函数,除非你知道所有的副作用。如果有疑问,请执行ipdiscover()

不要将字符串与==运算符进行比较:这会将参数强制为数字。如果它看起来不像一个数字,你会得到零。对于大多数s来说,这$input == "quit"很可能是正确的。$input

但是,if语句是根据块定义的,而不是根据语句(如在 C 中)。因此,你必须做

if ($input eq "quit") {
  exit;
}

或简写:exit if $input eq "quit";. 但是你为什么要这样做呢?exit终止整个程序。

另一方面,until(($input eq "quit")||($input eq "q"))它是一个正确的终止条件,一旦你修复了$input.

我认为您应该执行以下操作,因为这样可以更好地处理输入的结尾(例如在 Linux 上:Ctrl-D、Windows;Ctrl-Z):

use strict; use warnings; # put this at the top of every program!

while(defined(my $answer = prompt("type q or quit to exit: "))) {
  last if $answer eq "q"
       or $answer eq "quit"
}

sub prompt {
  my ($challenge) = @_;
  local $| = 1;  # set autoflush;
  print $challenge;
  chomp( my $answer = <STDIN> // return undef);
  return $answer;
}

您可以通过说这是last迭代来留下一个循环。

于 2013-08-28T07:12:09.670 回答