我有一些简单的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";
}
但是当我运行它时,输出是:
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$
我做错了吗?
答案 0 :(得分:18)
C:\>
perldoc -f print
:
另外要注意不要遵循 用左括号打印关键字 除非你想要相应的 右括号终止 打印的参数 - 插入一个+ 或括号括起来 参数。
因此,您需要的是:
print( ($val / 8050) . "\n" );
或
print +($val / 8050) . "\n";
您的语句打印$val / 8050
的结果,然后将"\n"
连接到print
的返回值,然后丢弃结果值。
顺便说一下,如果你:
use warnings;
然后perl
会告诉你:
print (...) interpreted as function at t.pl line 5. Useless use of concatenation (.) or string in void context at t.pl line 5.
答案 1 :(得分:3)
这更多的是评论而不是答案,但我不知道如何做到这一点,无论如何问题已经得到解答。
请注意,使用say而不是print来整齐地回避整个问题。也就是说,
#!/usr/bin/perl
use 5.010;
use strict;
use warnings;
my $val = 1;
for ( 1 .. 100 ) {
$val = ($val * $val + 1) % 8051;
say ($val / 8050);
}
按预期工作,即使没有出现问题。鉴于它有如此微小的差异,我仍然对这说有多有用感到惊讶。
答案 2 :(得分:0)
该行可能解释如下
(print($val / 8050)) . " \n";
即。括号用作函数参数列表的分隔符,静默丢弃。“\ n”。尝试:
print( ($val/8050) . "\n" );