在Perl 5.12.1上运行良好的代码不会';不要在5.10.0上工作
我写了一些代码(大约100行),在5.12.1版上运行良好。 不幸的是,我的客户使用的是5.10.0版。所以我在5.10.0上测试了代码,发现它不起作用 在哪里可以找到5.10和5.12之间的差异列表在Perl 5.12.1上运行良好的代码不会';不要在5.10.0上工作,perl,Perl,我写了一些代码(大约100行),在5.12.1版上运行良好。 不幸的是,我的客户使用的是5.10.0版。所以我在5.10.0上测试了代码,发现它不起作用 在哪里可以找到5.10和5.12之间的差异列表 编辑: 我认为,对于“我在哪里可以找到5.10和5.12之间的差异列表”的问题,最好的答案是“接受答案”下的评论。有关下面代码的解释,请阅读 适用于5.12.1但不适用于5.10.0的代码($contents运行代码后仍然是空字符串) #读入前10行。 我的$contents=''; 对于(我
编辑: 我认为,对于“我在哪里可以找到5.10和5.12之间的差异列表”的问题,最好的答案是“接受答案”下的评论。有关下面代码的解释,请阅读
适用于5.12.1但不适用于5.10.0的代码(
$contents
运行代码后仍然是空字符串)
#读入前10行。
我的$contents='';
对于(我的$i=0;$i<10&&!eof;$i++){
$contents.=;
}
在两个版本上都有效的改进代码
# read in the first 10 lines.
my $contents = '';
my $i = 0;
while (<FILE>) {
last if $i >= 10;
$contents .= $_;
$i++;
}
#读入前10行。
我的$contents='';
我的$i=0;
而(){
如果$i>=10,则为最后一个;
$contents.=$\ux;
$i++;
}
查看页面。你会在那里找到perldelta的。或者发布您的代码并让我们查看;) 您的第一个代码示例中有一个bug。裸eof
报告上次读取文件句柄的状态。在第一次通过循环的时候,你(大概)还没有读到任何东西;无论如何,文件中没有任何内容。似乎此无效调用的内部行为已更改。在Perl5.12.1下运行Perl-E“sayeof”
不会打印任何内容。在Perl5.10.0下,它打印“1”
显式测试eof(FILE)
应该可以解决这个问题
Tangent:您的代码不是很地道。一个更完美的方法是
my $content;
while(<$fh>) {
if ( 1 .. 10 ) { $content .= $_ }
else { last }
}
my$content;
while(){
如果(1..10){$content.=$\u0}
else{last}
}
使用的成语有:
- 使用词法文件句柄而不是typeglob。(
而不是$fh
)文件
- 使用范围运算符
跟踪读取的行数。这张表 隐式测试输入行号。
$。
- 不要显式地测试EOF(让循环处理它)
- 使用
提前中断循环last
eof
的工作方式与“切线”中的CGood点相同!谢谢我仍然在用C/Java的方式思考。需要更加完美;)
my $content;
while(<$fh>) {
if ( 1 .. 10 ) { $content .= $_ }
else { last }
}