我在Perl脚本中运行while
循环,当stdin
没有输入任何内容时需要终止。我尝试了各种各样的可能性,最近while($in ne "")
,但没有任何效果。如果给定的条件(stdin)根本就没有(在提示符下按Enter键),则终止while循环的正确方法是什么?
编辑:为了澄清,我需要一个类似于下面代码的循环,如果没有为提示输入任何内容,我需要终止while循环。
print "Enter your information: ";
$in = <>;
while($in) {
#do stuff
print "Enter your information: ";
$in = <>;
}
答案 0 :(得分:4)
while (my $in = <>) {
chomp($in);
length($in) or last;
# ..
}
答案 1 :(得分:2)
其他两个答案已经涵盖了您,但为了更完整地复制您的代码,您可以执行以下操作:
use strict;
use warnings;
while (1) {
print "Enter your information: ";
my $in = <STDIN>;
chomp($in);
last if $in eq '';
}
答案 2 :(得分:1)
while (my $in = <STDIN>) {
print "got: '$in'\n";
chomp($in);
last if $in eq '';
}
print "done.\n"
答案 3 :(得分:0)
我认为你正在寻找这个
while () {
print "Enter your information: ";
chomp(my $in = <>);
last unless $in;
# do stuff with $in
}
答案 4 :(得分:0)
试试这个
#!/usr/bin/env perl
use warnings;
use strict;
my $in = '';
while (1) {
print "Enter your information: ";
$in = <STDIN>;
## do something with $in, I assume
last if $in =~ /^\s*$/; # empty or whitespace ends
}
但是你可能试图追加更改案例的行
$in = <STDIN>;
要
$in .= <STDIN>;
或者选择并添加。
或者您可能更普遍地想要一种过滤交互式提示的方法:
#!/usr/bin/env perl
use warnings;
use strict;
sub prompt {
my ($text, $filter) = @_;
while (1) {
print $text;
my $entry = <STDIN>;
chomp $entry;
return $entry if $entry =~ $filter;
}
}
prompt "Enter a digit: ", qw/^\d$/;