在Perl中使用空stdin循环

时间:2014-02-09 21:19:48

标签: perl

我在Perl脚本中运行while循环,当stdin没有输入任何内容时需要终止。我尝试了各种各样的可能性,最近while($in ne ""),但没有任何效果。如果给定的条件(stdin)根本就没有(在提示符下按Enter键),则终止while循环的正确方法是什么?

编辑:为了澄清,我需要一个类似于下面代码的循环,如果没有为提示输入任何内容,我需要终止while循环。

print "Enter your information: ";
$in = <>;

while($in) {
    #do stuff

    print "Enter your information: ";
    $in = <>;
}

5 个答案:

答案 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$/;