为什么没有“\ n”在Windows中添加静音打印?

时间:2013-02-14 23:15:47

标签: perl

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

SCRIPT1

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

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

输出

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

所以对我来说,Perl读过它并导致了一个新的空间。现在

SCRIPT2

#!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”参数,所以应该有两个空格。我只看到一个。

script3

#!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

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

script4

#!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”是否反转?

1 个答案:

答案 0 :(得分: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参数的parens后,"\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