Perl命令行-在循环时假设

Perl命令行-在循环时假设,perl,if-statement,Perl,If Statement,有人能解释下面两个perl(使用cygwin)命令的输出差异吗 $ echo abc | perl -n -e 'if ($_ =~ /a/) {print 1;}' 印刷品: 1 $ echo abc | perl -e 'if ($_ =~ /a/) {print 1;}' 第一个打印“1”,而第二个输出空白 谢谢-n开关在循环代码时添加了,因此在您的情况下,$\u是从标准输入填充的。在第二个示例中,没有,而循环,因此$\uu未定义 使用Deparse,您可以要求perl显示如何解析代码

有人能解释下面两个perl(使用cygwin)命令的输出差异吗

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

1

$ echo abc | perl -e 'if ($_ =~ /a/) {print 1;}'
第一个打印“1”,而第二个输出空白


谢谢

-n
开关在循环代码时添加了
,因此在您的情况下,
$\u
是从标准输入填充的。在第二个示例中,没有
,而
循环,因此
$\uu
未定义

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

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

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

谢谢,这就解释了。现在我有一个关于perl命令行选项-MO=Deparse的使用的问题。根据Perl--help,此选项意味着在执行程序之前,-[mM][-]模块执行“使用/不使用模块…”。我的问题是,您如何知道这个选项中的O和=字符(-MO=Deparse)。它有文档记录吗?@Rajeev yes,-M这样做。@Rajeev是模块名,
Deparse
是请求导入的函数。另一个选项是
-MList::Util=sum
,这对于
perl -MO=Deparse -e 'if ($_ =~ /a/) {print 1;}'

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