根据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”是否反转?
答案 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