我如何判断是否没有给出任何参数并且stdin上没有任何内容?

时间:2011-08-23 19:59:01

标签: linux perl unix

我想要一个我写的Perl脚本,如果它没有收到任何输入,就会显示帮助信息。

如何判断stdin上是否有任何内容?

5 个答案:

答案 0 :(得分:8)

if (@ARGV == 0 && -t STDIN && -t STDERR) { 
    print STDERR "$0: WARNING: reading input from keyboard, type ^D for EOF, ^C to intr.\n";
}

答案 1 :(得分:0)

答案 2 :(得分:0)

如果您正在讨论STDIN的输入,您可以检查变量是否等于空字符串(在删除CR / LF之后)。例如:

my $myInput = <STDIN>;
chomp($myInput);
if ($myInput eq "")
{
    print "Error! You didn't submit any data!\n";
}

但是,作为@thnee says,如果要检查通过命令行传入的参数,则应使用$#ARGV。

例如:

if ($#ARGV == -1)
{
    print "Error! No input arguments entered!\n";
    exit(-1);
}

参考文献:

http://perldoc.perl.org/functions/chomp.html

http://perldoc.perl.org/perlvar.html

答案 3 :(得分:0)

您可能还会发现这个perldoc FAQ对于检查键盘是否有任何输入非常有用:

http://perldoc.perl.org/perlfaq8.html#How-do-I-check-whether-input-is-ready-on-the-keyboard%3f

答案 4 :(得分:0)

可以检查STDIN上是否有某些 进入(使用非阻塞读取,selectioctl FIONREAD),但是无法检查是否有某些内容进入stdin,因为它尚未发生。

除了不可能,你要求违反惯例。例如,取catperlsort等等。如果您没有提供任何参数,他们会很乐意等待STDIN,直到您提供他们需要的为止。

用户知道使用man tooltool --help获取信息。