我试着用while循环一次读两行,但是得到了这个错误:
line 1
line 2
line 3
Use of uninitialized value in concatenation (.) or string at ....
Use of uninitialized value in concatenation (.) or string at ....
Use of uninitialized value in concatenation (.) or string at ....剧本:
#!/usr/bin/perl
use warnings;
use strict;
my $count = 1;
while ( my $two_lines = <DATA> . <DATA> ) {
print $two_lines;
}
__DATA__
line 1
line 2
line 3发布于 2015-10-12 19:35:42
从耗尽的文件句柄(在标量句柄中)读取时,readline操作符<HANDLE>返回undef。因此,第一个警告出现在while循环的第二次迭代中,当您从DATA读取(缺少)第4行时。接下来的两个警告来自第三次迭代,当您在一个耗尽的文件句柄上调用两次<DATA>时。
您可以通过使用不为undef的表达式来修复此问题。因为您使用perl >=v5.16,所以可以使用
while (my $line = (<DATA> // '') . (<DATA> // '')) { ...发布于 2015-10-12 19:45:12
这不是一个真正的错误,它只是一个警告。您应该在偶数行号文件上得到两个警告,在奇数文件上得到三个警告。当它第一次通过while表达式时,它从第一次读取很好,然后当它第二次读取时,文件句柄是空的,并打印警告。因为它第一次返回了一些内容,所以它将执行while循环的内容。最后一次,它将对filestream进行两次评估,得到任何信息并中止循环,但是警告两次它都试图将空读连接起来。如果你需要一个while循环,我会做的
while ( my $first_lines = <DATA> ) {
if (my $second_line = <DATA> ){
print $first_lines . $second_line;
}else{
print $first_lines
break;
}
}发布于 2015-10-13 01:14:02
readline,又名<$fh>返回undef以指示文件的结束(或错误)。你没在查这个。修正:
while (1) {
defined( my $line1 = <DATA> )
or last;
defined( my $line2 = <DATA> )
or die("Premature end of file\n");
print($line1 . $line2);
}https://stackoverflow.com/questions/33088227
复制相似问题