【发布时间】:2014-07-09 15:50:32
【问题描述】:
谁能解释下面两个 perl(使用 cygwin)命令的输出差异:
$ echo abc | perl -n -e 'if ($_ =~ /a/) {print 1;}'
打印:
1
$ echo abc | perl -e 'if ($_ =~ /a/) {print 1;}'
第一个打印 '1' 而第二个输出空白?
谢谢
【问题讨论】:
标签: perl if-statement
谁能解释下面两个 perl(使用 cygwin)命令的输出差异:
$ echo abc | perl -n -e 'if ($_ =~ /a/) {print 1;}'
打印:
1
$ echo abc | perl -e 'if ($_ =~ /a/) {print 1;}'
第一个打印 '1' 而第二个输出空白?
谢谢
【问题讨论】:
标签: perl if-statement
-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;
}
【讨论】:
O 是模块名称,Deparse 是请求导入的函数。另一个选项是-MList::Util=sum,这对于List::Util 的sum 函数很重要