【发布时间】:2014-04-18 18:00:49
【问题描述】:
我使用 perl 编写了一个简单的脚本,我想知道如何暂停程序或将其返回到之前的操作?我有这个代码
print "put your name:";
$s=<>;
它没有输出任何东西。我希望程序重复相同的操作,即要求用户输入他的姓名而不是继续。
【问题讨论】:
标签: perl
我使用 perl 编写了一个简单的脚本,我想知道如何暂停程序或将其返回到之前的操作?我有这个代码
print "put your name:";
$s=<>;
它没有输出任何东西。我希望程序重复相同的操作,即要求用户输入他的姓名而不是继续。
【问题讨论】:
标签: perl
my $s = '';
while ($s eq '') {
print "put your name:";
chomp($s = <>);
}
print "The name you entered is $s \n";
【讨论】:
$s = <>; chomp $s;
在开始之前无需将 $name 设置为任何内容 - 只需定义它:
my $name;
while ( not length $name ) { #Thx Dave Cross
print "What is your name? ";
$name = <STDIN>;
chomp $name;
}
在 Perl 中,使用 my 定义的变量(应该是变量的 99%)具有有限的范围。如果它们是在 block 中定义的(像 while 循环这样使用花括号的东西),一旦离开 block,它们就会失去价值。这就是为什么我必须在while 之前有my $name;。
如果$name 未定义或为空值,while ( not $name ) { 将起作用,因此这将循环,直到我在$name 中输入不为空的内容。
chomp 删除了我在按下 <ENTER> 键时输入的 NL 字符。在阅读任何类型的内容后,您应该始终 chomp 您的变量。习惯就好了。
在这种形式中,循环是自我记录的。我正在循环,而 $name 未填写。
您可以将chomp 与这样的输入结合起来:
my $name;
while ( not $name ) {
print "What is your name? ";
chomp ( $name = <STDIN> );
}
有些人喜欢这个,因为它有点短,但我不知道它是否更清晰。我喜欢代码清晰,因为它更容易维护。
【讨论】:
while (not defined $name) 或while (not length $name)。
while ( not length $name ) 是个好主意。我会更新我的答案。
sub readstr {
while (my $in = <>) {
chomp $in;
return $in if length $in;
}
"";
}
print "put your name:";
my $s = readstr();
【讨论】: