1

我正在编写一个将文件读入数组的 perl 脚本。我在 Windows 上使用 Perl 5.16 编写了程序(它也适用于 5.14),并且使用带有 Perl 5.12 的 Mac 脚本失败了。

失败的部分是这样的:my @array = <$file>. 在 Mac 上,数组返回正确的大小(与文件中的行数相同),但除了最后一个元素之外的每个元素都是空的。当我切换到这个代码时,代码可以正常工作:

my @array;
while(<$file>){
    push @array, $_;
}

我不确定如果我将行尾切换LFCRLF(Windows 风格)是否会有所不同。虽然问题解决了,但让我很困惑。我认为我列出的那两个代码片段完全相同。它们有什么区别在这里产生不同的结果?

4

1 回答 1

1

答案是,正如您所怀疑的,这两种方法是完全等价的。例子:

my $start = tell DATA; #store beginning filehandle position

my @array1 = <DATA>;

seek DATA,$start,0; #reset filehandle position

my @array2;
while(<DATA>){
    push @array2,$_;
}

print "List assignment:\n @array1\n";
print "Looping through:\n @array2\n";

__DATA__
1
2
foo
bar

你之前的失败很可能是别的原因。也许涉及 Mac 上的 Perl 或 Mac 的文件 IO 的某种问题,但更有可能是代码的其他部分(我的意思不是个人的:我会对自己的代码做出相同的假设)。

于 2012-08-17T17:25:47.983 回答