如何停止我的脚本而不是进展

时间:2014-03-13 18:49:31

标签: perl

我使用perl编写了一个简单的脚本,我想知道如何暂停程序或将其返回到之前的操作中?我有这个代码

print "put your name:";
$s=<>;

并没有输出任何东西。我希望程序重复相同的操作,即要求用户输入他的名字而不是进展。

3 个答案:

答案 0 :(得分:3)

my $s = '';
while ($s eq '') {
    print "put your name:";
    chomp($s = <>);
}
    print "The name you entered is $s \n";

答案 1 :(得分:2)

在开始之前无需设置$name - 只需定义它:

my $name;
while ( not length $name ) {  #Thx Dave Cross
    print "What is your name? ";
    $name = <STDIN>;
    chomp $name;
}

在Perl中,使用my定义的变量(应该是变量的99%)具有有限的范围。如果他们在块中定义(使用像while循环这样的大括号的东西),他们一旦离开块就会失去价值< / em>的。这就是为什么我必须在my $name;之前while

如果while ( not $name ) {未定义或为空值,$name将有效,因此这将循环,直到我在$name中输入一些不为空的内容

chomp删除了我按下<ENTER>键时输入的NL字符。在阅读任何类型后,您应始终chomp变量。只是习惯它。

在这种形式中,循环是自我记录。我正在循环,$name没有填写。

您可以将chomp与输入结合使用,如下所示:

my $name;
while ( not $name ) {
    print "What is your name? ";
    chomp ( $name = <STDIN> );
}

有些人喜欢这样,因为它有点短,但我不知道它是否更清楚。我是代码清晰度的粉丝,因为它更容易维护。

答案 2 :(得分:1)

sub readstr {
  while (my $in = <>) {
    chomp $in;
    return $in if length $in;
  }
  "";
}

print "put your name:";
my $s = readstr();