为什么不在此Perl代码中打印换行符?

rlb*_*ond 1 printing perl

我有一些简单的Perl代码:

#!/usr/bin/perl

use strict;   # not in the OP, recommended
use warnings; # not in the OP, recommended

my $val = 1;
for ( 1 .. 100 ) {
    $val = ($val * $val + 1) % 8051;
    print ($val / 8050) . " \n";
}
Run Code Online (Sandbox Code Playgroud)

但是当我运行它时,输出是:

bash-3.2$ perl ./rand.pl
0.0002484472049689440.000621118012422360.003229813664596270.08409937888198760.92
... <snipped for brevity> ...
2919250.9284472049689440.3526708074534160.1081987577639750.2295652173913040.1839
751552795030.433540372670807bash-3.2$
Run Code Online (Sandbox Code Playgroud)

难道我做错了什么?

Sin*_*nür 18

C:\> perldoc -f print:

另外注意不要使用左括号跟随print关键字,除非你想要相应的右括号来终止print的参数 - 插入一个+或在所有参数周围加上括号.

因此,您需要的是:

print( ($val / 8050) . "\n" );
Run Code Online (Sandbox Code Playgroud)

要么

print +($val / 8050) . "\n";
Run Code Online (Sandbox Code Playgroud)

您打印的语句结果$val / 8050然后连接"\n"到返回值,print然后丢弃结果值.

顺便说一下,如果你:

use warnings;
Run Code Online (Sandbox Code Playgroud)

然后perl会告诉你:

   print (...) interpreted as function at t.pl line 5.
   Useless use of concatenation (.) or string in void context at t.pl line 5.