任何人都可以解释下面两个perl(使用cygwin)命令的输出差异:
$ echo abc | perl -n -e 'if ($_ =~ /a/) {print 1;}'
打印:
1
$ echo abc | perl -e 'if ($_ =~ /a/) {print 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;
}