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

Perl 为什么“\n”没有在Windows中添加静默打印?,perl,Perl,根据Simon Cozens开始的Perl,应该在Windows下用Perl添加一个静默打印,这在我发现的大多数脚本中都是如此。但是,由于我不知道的原因,Perl无法在以下示例中看到\n。这显然与括号的使用有关,但我找不到多少信息来理解它们之间的区别 脚本1 #!usr/bin/perl #ranges.pl use warnings; use strict; print reverse (1 .. 6), "\n"; 输出是 654321 <-- c:\Users\Br

根据Simon Cozens开始的Perl,应该在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
654321
      <--  
654321
C:Users\Brenden\Desktop\Begperl>
654321
      <--
      <--
C:\\Users\Brenden\Desktop\Begperl
输出是

654321
       <--
c:\Users\Brenden\desktop\begperl
654321
      <--  
654321
C:Users\Brenden\Desktop\Begperl>
654321
      <--
      <--
C:\\Users\Brenden\Desktop\Begperl
输出是

654321
       <--
c:\Users\Brenden\desktop\begperl
654321
      <--  
654321
C:Users\Brenden\Desktop\Begperl>
654321
      <--
      <--
C:\\Users\Brenden\Desktop\Begperl
输出显示

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

此输出中的第一个\n会发生什么情况??我唯一的解释是,下一个打印输出占用了这个空间,包括654321和一个任意顺序的空间。但这一解释听起来并不正确。对我来说,无论是qw 1 2 3 4 5 6还是qw1 2 3 4 5 6,在脚本2,3,4中,我不应该仍然看到2个空格,不管是否反转?

所以你知道它们是相同的

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";  <--
以下两行将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"));
print reverse qw(1 2 3 4 5 6), "\n";
print(reverse(qw(1 2 3 4 5 6), "\n"));
OP用错误注释的片段重写了他的问题。下面是正确的带注释的输出

脚本1输出654321\n:

script3输出654321\n\n:

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


所以你知道这些是一样的

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";  <--
以下两行将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"));
print reverse qw(1 2 3 4 5 6), "\n";
print(reverse(qw(1 2 3 4 5 6), "\n"));
OP用错误注释的片段重写了他的问题。下面是正确的带注释的输出

脚本1输出654321\n:

script3输出654321\n\n:

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


不要认为我犯了错误,但是当我尝试您建议的内容时,Perl仍然对这两种打印有不同的理解。一个后面是一个安静的空间,但另一个不是。我是否误解了您的意思或犯了错误?@b这是一个优先事项:列表运算符(如print和reverse)对右侧所有可用参数进行操作。您可以按函数指定显式参数列表。。。。paren前面是否有空格并不重要。qw的参数不重要:这只是一个引用操作符。Ikegami刚刚向您展示了如何用perl解析您编写的行。在第二个示例中,反过来使\n成为要打印的第一个参数。@b这就是ikegami所说明的-它们是不同的,以及它们是如何不同的。我想我现在理解得稍微好一点了,但不是100%清楚。但是,为什么命令-print会反转1..6,\n;-给出两个不同的结果?在第一个脚本中,输出654321后面有一个空格,而在第二个脚本中,另一个654321紧跟其后,没有空格。为什么您认为没有更改的部分会导致输出的更改?你完全错了。反向打印1..6,\n;在两个脚本中给出相同的结果。它的印刷反面是qw1 2 3 4 5 6,\n;并打印反向qw1 2 3 4 5 6,\n;这会产生不同的输出。请参阅更新。这应该更清楚。不要认为我犯了错误,但是当我尝试您建议的内容时,Perl仍然对这两种打印有不同的理解。一个后面是一个安静的空间,但另一个不是。我是否误解了您的意思或犯了错误?@b这是一个优先事项:列表运算符(如print和reverse)对右侧所有可用参数进行操作。您可以按函数指定显式参数列表。。。。paren前面是否有空格并不重要。qw的参数不重要:这只是一个引用操作符。Ikegami刚刚向您展示了如何用perl解析您编写的行。在第二个示例中,反过来使\n成为要打印的第一个参数。@b这就是ikegami所说明的-它们是不同的,以及它们是如何不同的。我想我现在理解得稍微好一点了,但不是100%清楚。但是,为什么命令-print会反转1..6,\n;-给出两个不同的结果?在第一个脚本中,输出654321后面有一个空格,而在第二个脚本中,另一个654321紧跟其后,没有空格。为什么您认为没有更改的部分会导致输出的更改?你完全错了。反向打印1..6,\n;在两个脚本中给出相同的结果。它的印刷反面是qw1 2 3 4 5 6,\n;并打印反向qw1 2 3 4 5 6,\n;这会产生不同的输出。请参阅更新。应该更清楚。请记住,您的提示是\nC:\\Users\\…>取消我的更改,并将其添加到我的答案中。这样读起来有点困难,但更合适。请记住,您的提示是\nC:\\Users\\…>取消我的更改并将其添加到我的答案中。这样读有点难,但更合适。
654321           <== "654321\n" newline one
654321           <== "654321\n" newline two
                 <== prompt
C:\>             <== prompt