1

根据 Simon Cozens 的Beginning Perl,\n 应该在 Windows 下的 Perl 中添加静默打印,这在我发现的大多数脚本中都是如此。但是,由于我不知道的原因,Perl 在以下示例中看不到 \n。它显然与括号的使用有关,但我找不到太多信息来理解这些差异。

脚本1

#!usr/bin/perl
#ranges.pl
use warnings;
use strict;

print reverse (1 .. 6), "\n";

输出是

654321
       <--
c:\Users\Brenden\desktop\begperl

所以对我来说 \n 被 Perl 读取并导致了一个新的空间。现在

脚本2

#!usr/bin/perl
#ranges.pl
use warnings;
use strict;

print reverse (1 .. 6), "\n";
print reverse qw(1 2 3 4 5 6), "\n";

输出是

654321
      <--  
654321
C:Users\Brenden\Desktop\Begperl>

对我来说,因为有两个“\n”参数,所以应该有两个空格。我只看到一个。

脚本3

#!usr/bin/perl
#ranges.pl
use warnings;
use strict;

print reverse (1 .. 6), "\n";
print "\n";

输出是

654321
      <--
      <--
C:\\Users\Brenden\Desktop\Begperl

由于创建了两个空格,这意味着 Perl 不会将两个空格压缩为一个。因此,对我来说,很可能在 script2 中,2 个“654321”之间创建的空间是由于第一个“\n”而第二个“\n”被忽略了。如果脚本 2 中没有忽略第二个“\n”,则输出应该是

654321
      <-- 
654321
      <--
C:\\Users\Brenden\Desktop\Begperl 

或者

654321
      <--
      <--
654321
C:\\Users\Brenden\Desktop\Begperl

现在,如果我在第二个打印中添加一个括号。

脚本4

#!usr/bin/perl
#ranges.pl
use warnings;
use strict;

print reverse (1 .. 6), "\n";
print reverse (qw(1 2 3 4 5 6)), "\n";

输出显示

654321
654321
      <--
C:Users\Brenden\Desktop\Begperl>

此输出中的第一个“\n”会发生什么?对我的唯一解释是该空间被下一个打印输出占用,其中包括“654321”和一个空格(无论顺序如何)。但这个解释听起来不太对。对我来说,无论是 qw( 1 2 3 4 5 6 ) 还是 (qw(1 2 3 4 5 6),"\n") 传递给反向,在脚本 2,3,4 中我不应该仍然看到 2空格,不管“\n”是否反转?

4

1 回答 1

4

所以你知道这些是一样的

print reverse (1 .. 6), "\n";
print reverse (qw(1 2 3 4 5 6)), "\n";

然后你改变了其中一个。

print reverse (1 .. 6), "\n";
print reverse qw(1 2 3 4 5 6), "\n";  <--

那么为什么你会惊讶他们不再提供相同的输出呢?


删除标识reverse参数的括号后,"\n"开始传递给reverse.

以下两行将结果传递qw( 1 2 3 4 5 6 )给反转:

print reverse (qw(1 2 3 4 5 6)), "\n";
print(reverse(qw(1 2 3 4 5 6), "\n"));

以下两行将结果传递qw( 1 2 3 4 5 6 ), "\n"给反转:

print reverse qw(1 2 3 4 5 6), "\n";
print(reverse(qw(1 2 3 4 5 6), "\n"));

OP 用错误注释的片段重写了他的问题。这是正确的注释输出。

script1 输出"654321\n"

654321           <== "654321\n" newline one
                 <== prompt
C:\>             <== prompt

script2 输出"654321\n\n654321"

654321           <== "654321\n" newline one
                 <== "\n"       newline two
654321           <== "654321" + prompt
C:\>             <== prompt

script3 输出"654321\n\n"

654321           <== "654321\n" newline one
                 <== "\n"       newline two
                 <== prompt
C:\>             <== prompt

script4的第一个可能的预期输出,"654321\n\n654321\n"

654321           <== "654321\n" newline one
                 <== "\n"       newline two
654321           <== "654321\n" newline three
                 <== prompt
C:\>             <== prompt

script4 的第二个可能的预期输出,"654321\n\n\n654321"

654321           <== "654321\n" newline one
                 <== "\n"       newline two
                 <== "\n"       newline three
654321           <== "654321" + prompt
C:\>             <== prompt

script4 输出"654321\n654321\n"

654321           <== "654321\n" newline one
654321           <== "654321\n" newline two
                 <== prompt
C:\>             <== prompt
于 2013-02-14T23:20:31.077 回答