如何检查命令行参数是否等于'<'来自Perl的输入?

时间:2014-08-31 09:18:13

标签: perl

#!/usr/bin/perl -w

foreach $arg (@ARGV) {
        if ($arg eq "--version") {
                print "$0: version 0.1\n";
                exit(0);
        } elsif ($arg =~ /-[0-9]+/) {
                $n = $arg;
                $n =~ s/-//g;
        } elsif ($arg eq <){
                print "in";
        } else {
                push @files, $arg;
        }
}   

如何检查$ arg是否等于&lt;从输入? 提前致谢。

3 个答案:

答案 0 :(得分:3)

您正确使用了字符串--version的引号。您也应该使用<的引号。

请注意,您正在检查命令行参数,而不是输入。另请注意,在* nix系统上,如果您调用脚本

myscript.pl -12 < input

< input部分由shell处理,不会出现在参数列表中。

另见Getopt::Long

答案 1 :(得分:0)

@hahahakebab:@choroba说的是完全正确的。当你通过&lt;作为命令行参数将其放在双引号“&lt;”中这样它就可以作为程序的输入和修改后的代码,如下所示

    foreach my $arg (@ARGV) {
            if ($arg eq "--version") {
                    print "$0: version 0.1\n";
                    exit(0);
            } elsif ($arg =~ /-[0-9]+/) {
                    $n = $arg;
                    $n =~ s/-//g;
            } elsif ($arg eq "<"){
                    print "in";
            } else {
                    push @files, $arg;
            }
    } 

答案 2 :(得分:0)

如果在命令行中使用<,则标准输入来自文件。 如果命令行中未使用<(并且|未用于指定来自另一个进程的输出流的输入),则标准输入来自终端。

您可以通过选中-t STDIN

来区分Perl中的这两种情况
if (-t STDIN) {
    print "input is from terminal\n";
} else {
    print "input is from a file/pipe\n";
}