我写了一些代码(大约100行),在5.12.1版本上工作正常.不幸的是我的客户端使用的是版本5.10.0.所以我测试了5.10.0上的代码,发现它不起作用!
我在哪里可以找到5.10和5.12之间的差异列表?
我认为"在哪里可以找到5.10和5.12之间的差异列表"问题的最佳答案是"已接受答案"下的" plusplus "评论.有关下面代码的解释,请阅读Michael Carman的回答.
代码适用于5.12.1但不适用于5.10.0($contents运行代码后仍为空字符串)
# read in the first 10 lines.
my $contents = '';
for (my $i = 0; $i < 10 && ! eof; $i++) {
$contents .= <FILE>;
}
Run Code Online (Sandbox Code Playgroud)
适用于这两个版本的改进代码.
# read in the first 10 lines.
my $contents = '';
my $i = 0;
while (<FILE>) {
last if $i >= 10;
$contents .= $_;
$i++;
}
Run Code Online (Sandbox Code Playgroud)
你的第一个代码示例中有一个错误.eof读取最后一个文件句柄的裸报告状态.在第一次通过循环时,你(可能)还没有读过任何东西; FILE反正没有任何东西.似乎此无效调用的内部行为已更改.在Perl 5.12.1下运行perl -E "say eof"什么都不打印.在Perl 5.10.0下,它打印"1".
明确测试eof(FILE)应该解决问题.
Tangent:你的代码不是很惯用.一种更有意义的方法
my $content;
while(<$fh>) {
if ( 1 .. 10 ) { $content .= $_ }
else { last }
}
Run Code Online (Sandbox Code Playgroud)
使用的习语是:
$fh而不是FILE)..可以跟踪读取的行数.此表单隐式地测试输入行号$..last尽早摆脱循环.| 归档时间: |
|
| 查看次数: |
290 次 |
| 最近记录: |