Perl命令行 - 假设while循环

时间:2014-07-09 06:38:28

标签: perl if-statement

任何人都可以解释下面两个perl(使用cygwin)命令的输出差异:

$ echo abc | perl -n -e 'if ($_ =~ /a/) {print 1;}'

打印:

1

$ echo abc | perl -e 'if ($_ =~ /a/) {print 1;}'

第一个打印'1'而第二个输出空白?

由于

1 个答案:

答案 0 :(得分:1)

-n开关会在您的代码周围添加while循环,因此在您的情况下,$_会从标准输入中填充。在第二个示例中,没有while循环,因此$_未定义。

使用Deparse,您可以要求perl显示您的代码是如何解析的,

perl -MO=Deparse -n -e 'if ($_ =~ /a/) {print 1;}'

LINE: while (defined($_ = <ARGV>)) {
    if ($_ =~ /a/) {
        print 1;
    }
}

perl -MO=Deparse -e 'if ($_ =~ /a/) {print 1;}'

if ($_ =~ /a/) {
    print 1;
}